本文主要是介绍STM32F207 USART2 波特率设置9600以下,4800、2400发送报文乱码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近有一个老项目有新的需求,需要对串口进行一下改造,波特率从原来的9600改到了2400,结果奇葩的事情发生了,之前一直好好的串口,发送出来的报文竟然变成了乱码,代码也就修改了一下波特率,其他的什么都没有修改。百思不得其解,网上查阅资料说是时钟频率的问题,降低一点就解决了。但是我仔细检查过代码确认不是这个原因导致的,而且另外一个串口USART3 波特率设置成2400是能够正常收发报文的。两个串口的初始化,中断处理是一模一样的,这就让我非常费解,问题到底出在哪里?
最后经过一遍遍调试,终于发现,是因为我在定时器中有对USART2进行设置接收操作,每当串口空闲时间操作16ms,就强制将串口设置成接收模式,目的是为了防止串口发送失败导致死锁,接收不到数据。其中定时器每1ms产生一次中断,自定义了一个变量用来记录串口空闲时间,每当接收到一个字节或者发送一个字节都会把空闲时间置零。当空闲时间大于16的时候,就强制串口进入接收模式。
问题就出在强制进入接收模式的时间,由于之前是使用的9600以及更高的波特率,一直都没有出现过问题。这次把波特率改成2400后,串口的发送速率下降了很多,可能我刚想发送报文进入发送模式,就立马被强制进入接收模式,然后就导致出现了莫名其妙的乱码问题,只要把16ms改大一点,程序就变得正常了!
这篇关于STM32F207 USART2 波特率设置9600以下,4800、2400发送报文乱码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!