stm32单片机TIM1定时器中断与usart串口初始化冲突。

在使用STM32调试PID参数时,程序卡在定时器初始化,发现问题是由于定时器中断触发串口发送,但串口初始化未完成,导致循环卡死。调整初始化顺序和中断时间解决了问题。作为新手,作者感到很有成就感,并分享了经验。
摘要由CSDN通过智能技术生成

        在我用串口调试pid参数时,程序下载之后发现一直卡在timer的初始化函数里面,我的一开始的初始化顺序如图。0f541660c2a3414aadb51b4198843816.png

 也就是连最基本的OLED显示字符串都显示不了。一直不知道原因,后来在一次偶然的排查中发现让我把定时器中断的时间调长一点(差不多1s),程序就可以运行。但是我是用串口调试pid,中断时间间隔不能很长,当我把中断时长调为25ms时,程序又卡在timer初始化里。把我气坏了。这是我的中断服务函数。justfloat-test函数就是串口发送数据的函数。50828b8ec28e4e2d9efeffeadf724972.png

 刚开始觉得没啥问题后来用stlink进行debug时才发现问题。函数不是卡在timer-init里,而是卡在serial串口发送函数里。e5a25e694d9b48bca9452155831354be.png

 一直卡在这个while循环里。就是说我在timer初始化函数里怎么会用到串口呢?后来想了想才发现是进中断后,触发了串口发送,而我的串口初始化在后面,时间太短(25ms)根本执行不完串口初始化,才导致标志位一直为零,卡在循环里面。

后来调了一下初始化顺序,函数就能很好的运行了。3740f0dd1ada4a688ed8c5a16e3c166a.png

 虽然只是一个小问题,但是自己解决了,还尝试第一次发CSDN,也是蛮有成就感的。

本人也是刚接触stm32没多久,如有错误,欢迎大家批评指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值