完善资料让更多小伙伴认识你,还能领取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(); } |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1090浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
456浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 23:51 , Processed in 1.099326 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号