STM32 USART奇偶校验控制详解
目录
概述
1. 串口协议实现
2 奇偶校验控制
3 校验位计算
3.1 偶校验
3.2 奇校验
3.3 接收时进行奇偶校验检查
3.4 发送时的奇偶校验生成
概述
本文主要介绍STM32 USART的奇偶校验控制的实现原理,以及和其相关的寄存器的状态位含义和计算方法等内容。
1. 串口协议实现
串口波形如下:
一个协议包由如下bit位构成
1)bit -0: 启动位, 电平变化1—–>0
2)bit-1~bit8: 数据位, 如果存在奇偶校验位,则数据位可选择为7bit或者8bit, 最高bit位为奇偶校验位
3)停止位吗,电平变化0—->1
2 奇偶校验控制
将 USART_CR1 寄存器中的 PCE 位置 1,可以使能奇偶校验控制(发送时生成奇偶校验位,接收时进行奇偶校验检查)。根据 M 位定义的帧长度, 下表列出了可能的 USART 帧格式。
1. 图注: SB:起始位, STB:停止位, P:奇偶校验位。
USART_CR1 寄存器中的 PCE 的相关信息
控制寄存器 1 (USART_CR1)
Control register 1
偏移地址: 0x0C
复位值: 0x0000 0000位 8 PEIE: PE 中断使能 (PE interrupt enable)
此位由软件置 1 和清零。
0:禁止中断
1:当 USART_SR 寄存器中 PE=1 时,生成 USART 中断
3 校验位计算
3.1 偶校验
对奇偶校验位进行计算,使帧和奇偶校验位中“1”的数量为偶数(帧由 7 个或 8 个 LSB 位组成,具体取决于 M 等于 0 还是 1)。
例如:
数据=00110101; 4 个位置 1 => 如果选择偶校验( USART_CR1 寄存器中的 PS 位=
0),则校验位是 0。
3.2 奇校验
对奇偶校验位进行计算,使帧和奇偶校验位中“1”的数量为奇数(帧由 7 个或 8 个 LSB 位
组成,具体取决于 M 等于 0 还是 1)。
例如:
数据=00110101; 4 个位置 1 => 如果选择奇校验( USART_CR1 寄存器中的 PS 位=
1),则校验位是 1。
3.3 接收时进行奇偶校验检查
如果奇偶校验检查失败,则 USART_SR 寄存器中的 PE 标志置 1;如果 USART_CR1 寄存器中 PEIE 位置 1,则会生成中断。 PE 标志由软件序列清零(从状态寄存器中读取,然后USART_DR 数据寄存器执行读或写访问)。
注意:
如果被地址标记唤醒:会使用数据的 MSB 位而非奇偶校验位来识别地址。此外,接收器不会对地址数据进行奇偶校验检查(奇偶校验出错时, PE 不置 1)。
状态寄存器 USART_SR
状态寄存器 (USART_SR)
Status register
偏移地址: 0x00
复位值: 0x00C0 0000
位 0 PE:奇偶校验错误 (Parity error)
当在接收器模式下发生奇偶校验错误时,该位由硬件置 1。该位由软件序列清零(读取状态
寄存器,然后对 USART_DR 数据寄存器执行读或写访问)。将 PE 位清零前软件必须等待
RXNE 标志被置 1。如果 USART_CR1 寄存器中 PEIE = 1,则会生成中断。
0:无奇偶校验错误
1:奇偶校验错误
3.4 发送时的奇偶校验生成
如果 USART_CR1 寄存器中的 PCE 位置 1,则在数据寄存器中所写入数据的 MSB 位会进行传送,但是会由奇偶校验位进行更改(如果选择偶校验 (PS=0),则“1”的数量为偶数;如果选择奇校验 (PS=1),则“1”的数量为奇数)。
注意:
用于管理发送过程的软件程序可以激活软件序列,进而将 PE 标志清零(从状态寄存器中读取,然后对数据寄存器执行读或写访问)。在半双工模式下工作时(具体取决于软件),这可能会导致 PE 标志意外清零
作者:mftang