最近调试STM32f0系列的MCU,在用到串口1时,遇到2个问题:
1、usart1 映射到PB6、PB7端口,我用的是标准库函数,根据库函数显示 GPIO_AF0和GPIO_AF1都有usart1口的映射,在用到时候到底该怎么选择呢?我没有仔细查看手册,自己做的测试,结果如下:
PA9和PA10 使用的是GPIO_AF_1映射,即GPIO_PinAFConfig(GPIOA,GPIO_Pinsource10,GPIO_AF_1);GPIO_PinAFConfig(GPIOA,GPIO_Pinsource9,GPIO_AF_1);
PB6和PB7 使用的是GPIO_AF_0,即GPIO_PinAFConfig(GPIOA,GPIO_Pinsource6,GPIO_AF_0);GPIO_PinAFConfig(GPIOA,GPIO_Pinsource7,GPIO_AF_0);
2、在使用串口接收中断接收数据的时候,一直会卡死,处在中断中出不来,也查看很多人的总结,确实是ORE中断,这个都是一样,很多人说这个是bug,我不这么认为,ST出的芯片稳定性肯定是非常不错的,我们只是应用,而且用的还不是全部的功能,所以我坚信是自己的问题,怀着这个初心,我做了下面的工作:
1、分析问题造成的原因
当串口接收到数据,产生接收中断的时候,我们的中断服务函数,读取数据;这么看流程是没有问题的,既然产生了ORE错误,说明了什么问题呢?我想应该是读取的速度没有接收的速度快。
解决这个问题就有2个方向:
1、在产生ORE中断的时候,进入中断清楚中断标志位,可以解决卡死的问题。
2、加快接收中断服务函数的读取速度。把接收中断的响应等级提高,我一开始设置的是2,设置到0以后,就不在出现ORE中断错误了。说明分析的没有问题
问题得到完美解决,在此记录,希望群友共同交流!
转载请标记出处。。