目录
概述
1 字符编码
1.1 USART 字符说明
1.2 字长编程
2 发送器
2.1 字符发送
2.2 可配置的停止位
2.3 配置停止位方法
3 单字节通信
4 中断字符
5 空闲字符
概述
本文主要讲述STM32 USART的发送端功能实现的原理,包括字节编码长度,发送器的波形特点,发送字节bit位的波形的变化特点,和中断相关的配置参数等内容。
1 字符编码
任何 USART 双向通信均需要至少两个引脚:接收数据输入引脚 (RX) 和发送数据引脚输出 (TX):
RX: 接收数据输入引脚就是串行数据输入引脚。过采样技术可区分有效输入数据和噪声从而用于恢复数据。
TX: 发送数据输出引脚。如果关闭发送器,该输出引脚模式由其 I/O 端口配置决定。如果使
能了发送器但没有待发送的数据,则 TX 引脚处于高电平。在单线和智能卡模式下,该 I/O用于发送和接收数据( USART 电平下,随后在 SW_RX 上接收数据)。
1.1 USART 字符说明
可通过对 USART_CR1 寄存器中的 M 位进行编程来选择 8 位或 9 位的字长。
TX引脚的电平:
起始位电平:
TX 引脚在起始位工作期间处于低电平状态。
停止位电平:
在停止位工作期间处于高电平状态。空闲字符可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。
停止字符:
在一个帧周期内接收到的电平均为“0”。发送器在中断帧的末尾插入 1或 2 个停止位(逻辑“1”位)以确认起始位。
空闲字符:
整个帧周期内电平均为“1”(停止位的电平也是“1”),该字符后是下一个数据帧的起始位。
发送和接收由通用波特率发生器驱动,发送器和接收器的使能位分别置 1 时将生成相应的发送时钟和接收时钟。
1.2 字长编程
控制寄存器 1 (USART_CR1)
Control register 1
偏移地址: 0x0C
复位值: 0x0000 0000位 12 M:字长 (Word length)
该位决定了字长。该位由软件置 1 或清零。
0: 1 起始位, 8 数据位, n 停止位
1: 1 起始位, 9 数据位, n 停止位
注意:在数据传输(发送和接收)期间不得更改 M 位
1)9 位字长( M 位置 1), 1 个停止位
2)8 位字长( M 位复位), 1 个停止位
2 发送器
发送器可发送 8 位或 9 位的数据字,具体取决于 M 位的状态。发送使能位 (TE) 置 1 时,发送移位寄存器中的数据在 TX 引脚输出,相应的时钟脉冲在 SCLK 引脚输出。
2.1 字符发送
USART 发送期间,首先通过 TX 引脚移出数据的最低有效位。该模式下, USART_DR 寄存器的缓冲区 (TDR) 位于内部总线和发送移位寄存器之间。每个字符前面都有一个起始位,其逻辑电平在一个位周期内为低电平。字符由可配置数量的停止位终止。
USART 支持以下停止位: 0.5、 1、 1.5 和 2 个停止位。
注意:
数据发送期间不应复位 TE 位。发送期间复位 TE 位会冻结波特率计数器,从而将损坏 TX 引
脚上的数据。当前传输的数据将会丢失。使能 TE 位后,将会发送空闲帧。
2.2 可配置的停止位
可以在控制寄存器 2 的位 13 和 位 12 中编程将随各个字符发送的停止位的数量。
● 1 个停止位: 这是停止位数量的默认值。
● 2 个停止位: 正常 USART 模式、单线模式和调制解调器模式支持该值。
● 0.5 个停止位: 在智能卡模式下接收数据时使用。
● 1.5 个停止位: 在智能卡模式下发送和接收数据时使用
空闲帧发送将包括停止位
m = 0 时,中断发送是 10 个低电平位,然后是已配置数量的停止位; m = 1 时,中断发送是11 个低电平位,然后是已配置数量的停止位。无法传送长中断(中断长度大于 10/11 个低电平位)。
可配置的停止位的波形如下:
2.3 配置停止位方法
实现步骤:
1. 通过向 USART_CR1 寄存器中的 UE 位写入 1 使能 USART。
2. 对 USART_CR1 中的 M 位进行编程以定义字长。
3. 对 USART_CR2 中的停止位数量进行编程。
4. 如果将进行多缓冲区通信,请选择 USART_CR3 中的 DMA 使能 (DMAT)。按照多缓冲通信中的解释说明配置 DMA 寄存器。
5. 使用 USART_BRR 寄存器选择所需波特率。
6. 将 USART_CR1 中的 TE 位置 1 以便在首次发送时发送一个空闲帧。7. 在 USART_DR 寄存器中写入要发送的数据(该操作将清零 TXE 位)。为每个要在单缓冲区模式下发送的数据重复这一步骤。
8. 向 USART_DR 寄存器写入最后一个数据后,等待至 TC=1。这表明最后一个帧的传送完成。禁止 USART 或进入暂停模式时需要此步骤,以避免损坏最后一次发送。
3 单字节通信
始终通过向数据寄存器写入数据来将 TXE 位清零。
TXE 位由硬件置 1,它表示:
● 数据已从 TDR 移到移位寄存器中且数据发送已开始。
● TDR 寄存器为空。
● USART_DR 寄存器中可写入下一个数据,而不会覆盖前一个数据。TXEIE 位置 1 时该标志位会生成中断。
1)发送时,要传入 USART_DR 寄存器的写指令中存有 TDR 寄存器中的数据,该数据将在当前发送结束时复制到移位寄存器中。
2)未发送时,要传入 USART_DR 寄存器的写指令直接将数据置于移位寄存器中,数据发送开始时, TXE 位立即置 1。
3)如果帧已发送(停止位后)且 TXE 位置 1, TC 位将变为高电平。如果 USART_CR1 寄存器中的 TCIE 位置 1,将生成中断。
向 USART_DR 寄存器中写入最后一个数据后,必须等待至 TC=1,之后才可禁止 USART或使微控制器进入低功率模式(请参见图 :发送时的 TC/TXE 行为)。
TC 位通过以下软件序列清零:
1. 从 USART_SR 寄存器读取数据
2. 向 USART_DR 寄存器写入数据
4 中断字符
将 SBK 位置 1 将发送一个中断字符。中断帧的长度取决于 M 位 。
如果 SBK 位置“1”,当前字符发送完成后,将在 TX 线路上发送一个中断字符。中断字符发送完成时(发送中断字符的停止位期间),该位由硬件复位。 USART 在上一个中断帧的末尾插入一个逻辑“1”位,以确保识别下个帧的起始位。
注意:
如果软件在中断发送开始前对 SBK 位进行了复位,将不会发送中断字符。对于两个连续的中断,应在上一个中断的停止位发送完成后将 SBK 位置 1。
5 空闲字符
将 TE 位置 1 会驱动 USART 在第一个数据帧之前发送一个空闲帧。
控制寄存器 1 (USART_CR1)
Control register 1
偏移地址: 0x0C
复位值: 0x0000 0000
位 3 TE:发送器使能 (Transmitter enable)
该位使能发送器。该位由软件置 1 和清零。
0:禁止发送器
1:使能发送器
注意:1:除了在智能卡模式下以外,传送期间 TE 位上的“0”脉冲(“0”后紧跟的是“1”)会在当前字的后面发送一个报头(空闲线路)。
2:当 TE 置 1 时,在发送开始前存在 1 位的时间延迟。