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

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 USART奇偶校验控制详解

发表回复