这算是一个STM32的BUG吗?

2019-07-14 18:20发布

完成串口初始化,之后再设置中断优先级。如果在这两个步骤间串口有数据传入,则单片机死机。

为了进一步测试,单独写了一段程序,用于测试串口2
程序非常简单,串口初始化完成后加入10S延时,在延时期间给串口发数据,10S后设置中断优先级。串口的中断服务函数是收到一个数据就发送出来,且在函数最后清除所有的中断标志位。如果单片机没有死机则完成中断优先级设置后进入循环,循环里面是闪LED。
现象是:每次都死机,死机后串口就一直发送同一个数据,从仿真看是死在中断函数里面。

猜想:STM32的其他外设也有同样问题。未测试。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
小新1999
1楼-- · 2019-07-15 02:27
您是中断哪里判断有问题了 能看代码吗
冰箱洗衣机
2楼-- · 2019-07-15 04:00
 精彩回答 2  元偷偷看……
小新1999
3楼-- · 2019-07-15 09:28
先关掉中断,串口中断优先级设置完再打开串口中断。
冰箱洗衣机
4楼-- · 2019-07-15 12:48
嗯,所以我最后的结论就是这样的。上面的代码是故意最后设置优先级,目的就是要说明这么做会引起死机,事实上我很少看到有论坛讨论过这个问题,且发现有很多人的代码并没有在意这种顺序,因为一般情况下并不容易发现。
123一起玩
5楼-- · 2019-07-15 16:29
1) 串口参数初始化(波特率/停止位等), 并使能串口。
2)使能串口和 GPIO 口时钟。
3) GPIO 口初始化设置(速度,上下拉等)以及复用映射配置。
4)开启串口相关中断,配置串口中断优先级。
5)编写中断服务函数。
6) 串口数据接收和发送。
以上是我从STM32开发datesheet中里面写的串口中断编程步骤,没毛病,看到你的步骤不是按照这样配。就出现死机

一周热门 更多>