STM32
直播中

刘波

7年用户 925经验值
私信 关注
[问答]

串口波特率配置不正确,接收为乱码是怎么回事?如何解决?

串口波特率怎么配置,CLK_CKDIVR = 0x18;
8000000/115200 = 69
UART2_BRR2 = 0x05;
UART2_BRR1 = 0x04;
这样配置以后,串口接收是乱码,波特率错了,我计算哪里出错了?求教

回帖(2)

黄淳

2024-5-14 16:17:09
为何不直接调用库函数配置波特率
举报

李鸿洋

2024-5-14 18:15:13
串口波特率配置不正确导致接收乱码的原因可能是发送端和接收端的波特率不匹配。在这种情况下,数据传输会出现错误,导致接收到的数据无法正确解析。为了解决这个问题,我们需要确保发送端和接收端的波特率设置相同。

关于您提供的代码,我将逐步分析并找出可能的错误:

1. CLK_CKDIVR = 0x18; 这行代码设置了时钟分频器的值。我们需要知道原始时钟频率以及分频后的时钟频率,以便计算波特率。

2. 8000000/115200 = 69 这个计算看起来是正确的,但是我们需要确认这个值是否与您的硬件配置相匹配。

3. UART2_BRR2 = 0x05; UART2_BRR1 = 0x04; 这两行代码设置了UART的波特率寄存器。波特率寄存器的值取决于时钟频率和所需的波特率。在STM32微控制器中,波特率寄存器的计算公式为:

   UART_BRR = ((时钟频率) / ((波特率) * 16)) - 1

   根据您提供的代码,我们可以计算出波特率寄存器的值:

   ((8000000) / ((115200) * 16)) - 1 = 69 - 1 = 68

   但是您的代码中UART2_BRR2 = 0x05; UART2_BRR1 = 0x04; 这两个值加起来是69,这与我们计算出的值68不符。

为了解决这个问题,请按照以下步骤操作:

1. 确认您的硬件配置,包括原始时钟频率和分频后的时钟频率。

2. 使用正确的时钟频率和所需的波特率重新计算波特率寄存器的值。

3. 更新您的代码,确保UART2_BRR2和UART2_BRR1的值相加等于计算出的波特率寄存器值。

4. 重新编译并上传您的代码,然后测试串口通信是否正常。

5. 如果问题仍然存在,请检查其他可能影响串口通信的因素,如数据位、停止位和奇偶校验位等。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分