完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
背景:小弟参考HOT大叔的定时器中断例程()写了一个程序。涉及到两个中断,一个串口中断,一个定时器中断。这两个中断配置都是copy的例程,然后我改变了定时器中断的内容想实现单片机的LED灯(LED挂在PB2上)隔0.5s闪烁
问题:调试发现,只要开启了Init_UART()这个函数,定时器进入中断执行DrvGPIO_ClrBit(E_GPB,2);这个语句后,LED灯并没有拉低,而是一直亮着。注释掉Init_UART函数LED等就可以正常闪烁。 补充:调试过程是用Nulink单步调试,确定定时器中断确定能够进入,就是执行DrvGPIO_ClrBit(E_GPB,2);这个语句没有效果。另外我做了另外一个实验,将PB.2的IO口改成PE.5的IO口,串口和LED等都能正常工作了。会不会UART的配置改变了PB2的IO口寄存器?求大神解答 |
|
相关推荐
1个回答
|
|
|
可能是因为在Init_UART()函数中使用了UART的GPIO引脚,导致IO口无法被其他函数使用。建议在Init_UART()函数中设置完UART后,释放GPIO引脚的占用以便其他函数可以使用。可以使用DrvGPIO_Open()函数重新打开GPIO口。如下:
void Init_UART(void) { ... // 设置UART GPIO DrvGPIO_InitFunction(E_FUNC_UART); ... // 释放GPIO口的占用 DrvGPIO_Open(E_GPB, 2, E_IO_OUTPUT); } 另外,建议在每个中断函数中都加上关中断和开中断的语句,以免多个中断同时发生时造成冲突。例如: void TIMER0_Callback(void) { __disable_irq(); ... DrvGPIO_ClrBit(E_GPB,2); ... __enable_irq(); } void UART_Callback(uint32_t u32UserData) { __disable_irq(); ... __enable_irq(); } |
|
|
|
|
只有小组成员才能发言,加入小组>>
1022 浏览 1 评论
1852 浏览 0 评论
1833 浏览 1 评论
3258 浏览 5 评论
3585 浏览 9 评论
1024浏览 1评论
1851浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1361浏览 1评论
1853浏览 0评论
1179浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:48 , Processed in 0.902590 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1442