STM32
直播中

曹利娟

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

做lora通讯用到usart,配置时遇到的usart奇偶校验问题求解

今天做lora通讯,用到usart,配置时发现usart奇偶校验困惑。假如CR1->M、CR1->PCE、CR1->PS均置位即发送9位数据(含最高位:校验位),校验使能,偶校验。在此条件下,数据寄存器写入0x101,那么发送时发送的结果是什么,是0x001,还是0x101?首先数据寄存器可以写入9位数据,那么发送时奇偶校验位是以数据寄存器含1个数计算,还是说在移位寄存器移动统计前8位,然后直接补上校验位。网上没搜索到相应情况和分析

回帖(1)

杨秀英

2024-5-20 15:33:04
在这种情况下,我们需要分析USART的配置和奇偶校验的工作原理。首先,我们需要了解USART的寄存器配置和奇偶校验的计算方法。

1. 配置USART寄存器:
   - CR1->M:设置为1,表示使用9位数据长度。
   - CR1->PCE:设置为1,表示启用奇偶校验。
   - CR1->PS:设置为1,表示使用偶校验。

2. 奇偶校验计算:
   - 奇偶校验位是根据数据寄存器中的前8位数据计算得出的。对于偶校验,如果前8位数据中1的个数为偶数,则校验位为0;如果为奇数,则校验位为1。

现在,我们来分析数据寄存器写入0x101的情况:

0x101的二进制表示为:0001 0000 0001

前8位数据为:0001 0000

根据偶校验规则,前8位数据中有1个1,为奇数,所以校验位为1。

因此,发送的数据为:0001 0000 0001(包括校验位)

所以,在这种情况下,发送的结果是0x101,而不是0x001。这是因为USART在发送数据时,会根据前8位数据计算奇偶校验位,并将其附加到数据寄存器中的数据上,然后一起发送。
举报

更多回帖

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