STM32 通用同步异步收发器 USART
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STOP模式下 USART1仍可工作, 还可唤醒MCU
USART1唤醒连到EXTI25
AHB分频 因子 APB分频 因子 PCLK max 48MHz
fCK SYSCLK max 48MHz HSI LSE 8MHz 32.768KHz
USART1SW[1:0] @ RCC_CFGR3
USART1
检测阶段结束
成功检测到波特率 硬件置位ABRF、RxNE,并同时由硬件更新USART_BRR 如果线路噪声过大,检测值BRR不准确 硬件置位ABRF、RxNE,以及ABRE和FE等错误标志 无论是否成功检测,第一个数据都能接收 ABRE置位时,收到RDR中的数据可能不正确
硬件检测数据块结尾,无需软件或其他资源干预
RTU:通过超时@USART_RTOR检测长时间的空闲总线 中 断 ASCII:通过特定的字符序列进行字符匹配 中断
协议的控制部分,地址识别、数据块完整性控制、命令 解析,需要软件实现
13
智能卡模式
支持ISO 7816-3标准定义的智能卡异步通信协议
Transmit message DTE DEAT
DEM: 方向信号使能,DE信号从RTS引脚输出 DEP: 方向信号(输出)极性 DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time
发送、接收引脚可通过软件交换@SWAP 发送、接收使能应答 新增标志
BUSY:表示接收线上是否有通信在进行 REACK:进入STOP模式前用以确认模块准备好接收了 TEACK:用于发送空闲帧时确保满足TE=0的最小时间(复位TE之 后,置位TE之前)
18
RS485的DE信号时序要求
UART活动能把MCU从停止模式唤醒 波特率设置更方便,独立于外设总线时钟
收、发引脚可互换(New) 支持单线半双工通信
USART特性(2)
独立的发送、接收标志(TxE和RxNE),并可触发中断 支持DMA功能,可触发DMA的发送和接收请求 支持主模式下的同步通行 支持硬件流控(CTS和RTS) 兼容LIN协议的主设备、从设备
USART比以往模块新增4种中断源
Interrupt event
Transmit Data Register Empty Transmission Complete
Interrupt flag
TXE TC
CTS
Receive Data Register Not Emptyy Overrun Error Idle line detection Parity Error LIN break Noise Flag, Overrun error and Framing Error in multibuffer communication. Character Match Receiver timeout error End of Block Wakeup from STOP mode
同时置位RWU; 硬件置位RWU; 随后的数据不会置位 收到的不匹配地址字节和后续的数据字 进入后的状态 RxNE以及触发接收中断 节都不会置位RxNE,也没有相应中断和 DMA请求;
如何退出 退出后
检测到Idle frame 硬件清零RWU; 不会置位IDEL
收到匹配的地址字节 (MSB=1,4位或7位LSB是地址信息) 硬件清零RWU; 该匹配的地址字节会置位RxNE
串行红外通行编/解码模式
智能卡模式
对字块模式(T=1)的支持(New) 对反向协议(inverse convention)的支持(New)
支持基本的MODBus通信(New)
地址/字符匹配 接收超时特性
USART特性(3)
多处理器通信
USART模块可进入静默模式 静默模式下关闭接收中断 可通过空闲帧检测或地址匹配检测来被唤醒
CTSIF
RXNE ORE IDLE PE LBDF NE, ORE, FE CMF RTOF EOBF WUF
新增中断源
CMF,字符匹配标志
收到和定义在ADD[7:0]中匹配的字符
可以用ADD[6:0]+ADD[7]=1来定义该模块的节点地址(用于从静默模式唤 醒);也可以用ADD[7:0]来定义要被识别的特殊字符
唤醒后
硬件置位WUF@ISR 如果使能了WUFIE还将产生中断
注意:
进入STOP模式前必须使能WUF中断 使用LSE作为USART时钟源时,唤醒字节波特率最高不能超 过4K(16倍采样时)、2K(8倍采样时)
9
和静默模式一起使用
若MCU进入STOP模式之前,USART已进入静默模式
智能卡模式特性比较 F0 Vs. F1
Features
智能卡模式下的最大波特率 发送出错时,根据协议发送方必 需重传数据
STM32F05x
3Mbits/s USART可以自动重发,并且重发的次数 可配置(最多8次) 能够重新接收的次数也是可编程的(最 多8次) 如果多次接收的数据还是有错,USART 不再发送NAK信号,而是硬件置位校验 错误标志 硬件支持
10
波特率自动检测
USART_BRR包含由用户设置的波特率;它也可 以在自动波特率检测模式下由硬件自动更新
使能控制 @ABREN
使能检测之前,要给USART_BRR赋上非0值
检测方法选择 @ABRMOD[1:0]
以”1”开头的字符:检测起始位的长度 以”10”开头的字符:检测起始位和第一位的长度
5
多处理器通信环境
一主多从的通信环境
只有目标接收者收到完整的数据帧 非目标接收者保持“静默”状态,减少接收开销
使能控制位:MME@USART_CR1 接收状态位不被置位 接收中断被关闭
唤醒(退出“静默”状态)的方式
WAKE@USART_CR1=0:检测到空闲帧 WAKE@USART_CR1=1:检测到地址标志
STM32F1xx
4.5Mbits/s
T=0 字符模式
接收出错时,根据协议智能卡也 必需重传数据
必需由软件来处理自动重 传的要求
发送时,两个连续的字符之间自 动插入用户设置的保护时间 字符等待超时(CWT)
无此特性
New
T=1 字块模式
字块等待超时(BWT) 使用新增的超时机制来实现 字块长度以及结尾检测 正向/反向协议 新增MSB/LSB数据位序可配置以及逻辑 电平反转的特性 所有T=1模式下的特性都 有软件来实现
单线半双工通信
TX引脚和智能卡一起驱动双向数据线,配置成AF-OD 置位CLKEN,以向智能卡提供时钟信号
收、发的数据帧格式
带校验的9位数据 & 1.5位停止位
支持字符协议(T=0)和字块协议(T = 1) 可配置的时钟分频器以提供智能卡宽泛的时钟信号范围
USART
Tx
SCLK
STOP模式唤醒 (WUS[2:0]@CR3) 相关控制寄存器:UESM、USART1SW、WUS、 WUFIE 相关标志寄存器:WUF 00 匹配地址 0 相关寄存器: Idle帧 MMRQ、 Mute模式唤醒 RWU、 1 (wake@CR1) RxNE 匹配 地址 10 起始位 11 RxNE
备注
8
从停止模式唤醒
USART可以把MCU从停止模式唤醒
使能控制:UESM@USART_CR1
建议进入停止模式前置位它,退出后就复位它
前提:时钟采用HSI或LSE
唤醒源选择:WUS@USART_CR3
RxNE置位 检测到起始位 收到匹配的地址字节
RxNE都会置位,这个唤醒字节不会丢
USART1
Tx Rx Rx Tx
USART2
Rx Tx
USART3
Rx Tx
USART4
主设备
从设备
从设备
从设备
6
从静默状态唤醒
空闲帧唤醒 WAKE=0
唤醒后硬件清零RWU 并不置位IDLE@SR
地址标志唤醒 WAKE=1
总线上传输的字节由MSB=1 来表示是地址字节 地址字节的低4/7位指明目标接 收节点 USART设备自身地址的定义
通用同步异步收发器 USART
通信外设
USART特性(1)
灵活可配置的串行通信属性
数据位长度:8位或9位 校验位(奇或偶)的产生和检测 停止位长度:1位、1.5位或2位 波特率可灵活配置 过采样位数:16位或8位
最高6M波特率(48MHz外设频率+8位过采样) 模块的双时钟域使得 (New)
11
可以通过软件置位ABRRQ来复位ABRF和ABRE标志,使 得再发起一次波特率自动检测
自动波特率检测时都使用16倍过采样,所能自动检测到的 波特率范围:f CK/65535 ≤ 位时间 ≤ f CK/16
LSE(32.768KHz):允许的波特率范围是0.5~2048 HIS(8MHz):允许的波特率范围是122~500K
用于智能卡通信模式
WUF,从停止模式唤醒标志
检测到由WUS定义的唤醒事件 只在停止模式下才会触发对应WUF中断
17
其他新特性
接收、发送寄存器分开
USART_RDR USART_TDR
RS485硬件控制模式
和nRTS复用的DTE信号(Data Transmit Enable) DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time DEP: Driver enable polarity selection DEM: Driver enable mode,DE信号从RTS引脚输出
0 起始位
1
xxxx
0 起始位
1
0
xxxx
12
MODBus模式通信
由施奈德发明的用于工业现场的总线协议 有两种传输模式
RTU(远程终端设备)
消息中每个字节包含两个4位的十六进制字符
ASCII(美国信息交换码)
消息中每个字节都作为两个ASCII字符发送
USART提供对以上两种传输协议基本的支持
半双工通信,主机需要产生方向信号告诉收发器 是进入发送还是接收模式 该方向信号的时序很关键
尤其是从发送切换到接收,因为用户需要确认收发器已 经处于接收模式,对方才能发送数据 F1/F2/L都采用GPIO模拟DE信号 AN3070 F0硬件控制DE信号(和nRTS复用引脚)
接收超时中断 波特率自动检测 模块双时钟域以及从停止模式唤醒
4
双时钟域
USART挂在APB总线上
通过PCLK时钟访问模块的寄存器
驱动USART内部过采样的时钟fCK有以下选择
PLCK,默认值 SYSCLK,独立于PCLK HSI,停止模式下可以被USART唤醒 LSE,低功耗nRTS共享引脚的用于RS485的发送使能信号 DTE (New)
14个中断源(13?)
比F2/F1新增5个中断源(New)
USART模块的实现
所有封装都带2个USART:U1和U2 U2比U1所支持的功能少些,不具备
USART的扩展特性
智能卡模式 红外编解码模式 LIN总线模式 MODBus总线模式
ADD[3:0]@USART_CR2 ADD[7:0]@USART_CR2 ADDM7@USART_CR2
7
多处理器通信下的静默模式
静默模式 使能 如何进入
唤醒方式
Wake =0(空闲帧) Wake =1(地址帧)
收到不匹配的地址字节; 或软件置位MMRQ 软件置位MME@CR1(接收方可在静默和活动模式下切换) 软件置位MMRQ
RTOF,接收超时
由RTOR寄存器定义接收超时,以波特率时钟为单位
普通模式下,从最后一个数据收到开始计时 智能卡模式下,从最后一个数据的起始位开始计时 RTOR可以动态地修改,若新值小于当前计数器,立刻置位超时
计数器即使在RE=0时也在计数,但只有RE=1了才会置位RTOF
EOBF,数据块结束标志
USART1唤醒连到EXTI25
AHB分频 因子 APB分频 因子 PCLK max 48MHz
fCK SYSCLK max 48MHz HSI LSE 8MHz 32.768KHz
USART1SW[1:0] @ RCC_CFGR3
USART1
检测阶段结束
成功检测到波特率 硬件置位ABRF、RxNE,并同时由硬件更新USART_BRR 如果线路噪声过大,检测值BRR不准确 硬件置位ABRF、RxNE,以及ABRE和FE等错误标志 无论是否成功检测,第一个数据都能接收 ABRE置位时,收到RDR中的数据可能不正确
硬件检测数据块结尾,无需软件或其他资源干预
RTU:通过超时@USART_RTOR检测长时间的空闲总线 中 断 ASCII:通过特定的字符序列进行字符匹配 中断
协议的控制部分,地址识别、数据块完整性控制、命令 解析,需要软件实现
13
智能卡模式
支持ISO 7816-3标准定义的智能卡异步通信协议
Transmit message DTE DEAT
DEM: 方向信号使能,DE信号从RTS引脚输出 DEP: 方向信号(输出)极性 DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time
发送、接收引脚可通过软件交换@SWAP 发送、接收使能应答 新增标志
BUSY:表示接收线上是否有通信在进行 REACK:进入STOP模式前用以确认模块准备好接收了 TEACK:用于发送空闲帧时确保满足TE=0的最小时间(复位TE之 后,置位TE之前)
18
RS485的DE信号时序要求
UART活动能把MCU从停止模式唤醒 波特率设置更方便,独立于外设总线时钟
收、发引脚可互换(New) 支持单线半双工通信
USART特性(2)
独立的发送、接收标志(TxE和RxNE),并可触发中断 支持DMA功能,可触发DMA的发送和接收请求 支持主模式下的同步通行 支持硬件流控(CTS和RTS) 兼容LIN协议的主设备、从设备
USART比以往模块新增4种中断源
Interrupt event
Transmit Data Register Empty Transmission Complete
Interrupt flag
TXE TC
CTS
Receive Data Register Not Emptyy Overrun Error Idle line detection Parity Error LIN break Noise Flag, Overrun error and Framing Error in multibuffer communication. Character Match Receiver timeout error End of Block Wakeup from STOP mode
同时置位RWU; 硬件置位RWU; 随后的数据不会置位 收到的不匹配地址字节和后续的数据字 进入后的状态 RxNE以及触发接收中断 节都不会置位RxNE,也没有相应中断和 DMA请求;
如何退出 退出后
检测到Idle frame 硬件清零RWU; 不会置位IDEL
收到匹配的地址字节 (MSB=1,4位或7位LSB是地址信息) 硬件清零RWU; 该匹配的地址字节会置位RxNE
串行红外通行编/解码模式
智能卡模式
对字块模式(T=1)的支持(New) 对反向协议(inverse convention)的支持(New)
支持基本的MODBus通信(New)
地址/字符匹配 接收超时特性
USART特性(3)
多处理器通信
USART模块可进入静默模式 静默模式下关闭接收中断 可通过空闲帧检测或地址匹配检测来被唤醒
CTSIF
RXNE ORE IDLE PE LBDF NE, ORE, FE CMF RTOF EOBF WUF
新增中断源
CMF,字符匹配标志
收到和定义在ADD[7:0]中匹配的字符
可以用ADD[6:0]+ADD[7]=1来定义该模块的节点地址(用于从静默模式唤 醒);也可以用ADD[7:0]来定义要被识别的特殊字符
唤醒后
硬件置位WUF@ISR 如果使能了WUFIE还将产生中断
注意:
进入STOP模式前必须使能WUF中断 使用LSE作为USART时钟源时,唤醒字节波特率最高不能超 过4K(16倍采样时)、2K(8倍采样时)
9
和静默模式一起使用
若MCU进入STOP模式之前,USART已进入静默模式
智能卡模式特性比较 F0 Vs. F1
Features
智能卡模式下的最大波特率 发送出错时,根据协议发送方必 需重传数据
STM32F05x
3Mbits/s USART可以自动重发,并且重发的次数 可配置(最多8次) 能够重新接收的次数也是可编程的(最 多8次) 如果多次接收的数据还是有错,USART 不再发送NAK信号,而是硬件置位校验 错误标志 硬件支持
10
波特率自动检测
USART_BRR包含由用户设置的波特率;它也可 以在自动波特率检测模式下由硬件自动更新
使能控制 @ABREN
使能检测之前,要给USART_BRR赋上非0值
检测方法选择 @ABRMOD[1:0]
以”1”开头的字符:检测起始位的长度 以”10”开头的字符:检测起始位和第一位的长度
5
多处理器通信环境
一主多从的通信环境
只有目标接收者收到完整的数据帧 非目标接收者保持“静默”状态,减少接收开销
使能控制位:MME@USART_CR1 接收状态位不被置位 接收中断被关闭
唤醒(退出“静默”状态)的方式
WAKE@USART_CR1=0:检测到空闲帧 WAKE@USART_CR1=1:检测到地址标志
STM32F1xx
4.5Mbits/s
T=0 字符模式
接收出错时,根据协议智能卡也 必需重传数据
必需由软件来处理自动重 传的要求
发送时,两个连续的字符之间自 动插入用户设置的保护时间 字符等待超时(CWT)
无此特性
New
T=1 字块模式
字块等待超时(BWT) 使用新增的超时机制来实现 字块长度以及结尾检测 正向/反向协议 新增MSB/LSB数据位序可配置以及逻辑 电平反转的特性 所有T=1模式下的特性都 有软件来实现
单线半双工通信
TX引脚和智能卡一起驱动双向数据线,配置成AF-OD 置位CLKEN,以向智能卡提供时钟信号
收、发的数据帧格式
带校验的9位数据 & 1.5位停止位
支持字符协议(T=0)和字块协议(T = 1) 可配置的时钟分频器以提供智能卡宽泛的时钟信号范围
USART
Tx
SCLK
STOP模式唤醒 (WUS[2:0]@CR3) 相关控制寄存器:UESM、USART1SW、WUS、 WUFIE 相关标志寄存器:WUF 00 匹配地址 0 相关寄存器: Idle帧 MMRQ、 Mute模式唤醒 RWU、 1 (wake@CR1) RxNE 匹配 地址 10 起始位 11 RxNE
备注
8
从停止模式唤醒
USART可以把MCU从停止模式唤醒
使能控制:UESM@USART_CR1
建议进入停止模式前置位它,退出后就复位它
前提:时钟采用HSI或LSE
唤醒源选择:WUS@USART_CR3
RxNE置位 检测到起始位 收到匹配的地址字节
RxNE都会置位,这个唤醒字节不会丢
USART1
Tx Rx Rx Tx
USART2
Rx Tx
USART3
Rx Tx
USART4
主设备
从设备
从设备
从设备
6
从静默状态唤醒
空闲帧唤醒 WAKE=0
唤醒后硬件清零RWU 并不置位IDLE@SR
地址标志唤醒 WAKE=1
总线上传输的字节由MSB=1 来表示是地址字节 地址字节的低4/7位指明目标接 收节点 USART设备自身地址的定义
通用同步异步收发器 USART
通信外设
USART特性(1)
灵活可配置的串行通信属性
数据位长度:8位或9位 校验位(奇或偶)的产生和检测 停止位长度:1位、1.5位或2位 波特率可灵活配置 过采样位数:16位或8位
最高6M波特率(48MHz外设频率+8位过采样) 模块的双时钟域使得 (New)
11
可以通过软件置位ABRRQ来复位ABRF和ABRE标志,使 得再发起一次波特率自动检测
自动波特率检测时都使用16倍过采样,所能自动检测到的 波特率范围:f CK/65535 ≤ 位时间 ≤ f CK/16
LSE(32.768KHz):允许的波特率范围是0.5~2048 HIS(8MHz):允许的波特率范围是122~500K
用于智能卡通信模式
WUF,从停止模式唤醒标志
检测到由WUS定义的唤醒事件 只在停止模式下才会触发对应WUF中断
17
其他新特性
接收、发送寄存器分开
USART_RDR USART_TDR
RS485硬件控制模式
和nRTS复用的DTE信号(Data Transmit Enable) DEAT[4:0]: Driver Enable assertion time DEDT[4:0]: Driver Enable deassertion time DEP: Driver enable polarity selection DEM: Driver enable mode,DE信号从RTS引脚输出
0 起始位
1
xxxx
0 起始位
1
0
xxxx
12
MODBus模式通信
由施奈德发明的用于工业现场的总线协议 有两种传输模式
RTU(远程终端设备)
消息中每个字节包含两个4位的十六进制字符
ASCII(美国信息交换码)
消息中每个字节都作为两个ASCII字符发送
USART提供对以上两种传输协议基本的支持
半双工通信,主机需要产生方向信号告诉收发器 是进入发送还是接收模式 该方向信号的时序很关键
尤其是从发送切换到接收,因为用户需要确认收发器已 经处于接收模式,对方才能发送数据 F1/F2/L都采用GPIO模拟DE信号 AN3070 F0硬件控制DE信号(和nRTS复用引脚)
接收超时中断 波特率自动检测 模块双时钟域以及从停止模式唤醒
4
双时钟域
USART挂在APB总线上
通过PCLK时钟访问模块的寄存器
驱动USART内部过采样的时钟fCK有以下选择
PLCK,默认值 SYSCLK,独立于PCLK HSI,停止模式下可以被USART唤醒 LSE,低功耗nRTS共享引脚的用于RS485的发送使能信号 DTE (New)
14个中断源(13?)
比F2/F1新增5个中断源(New)
USART模块的实现
所有封装都带2个USART:U1和U2 U2比U1所支持的功能少些,不具备
USART的扩展特性
智能卡模式 红外编解码模式 LIN总线模式 MODBus总线模式
ADD[3:0]@USART_CR2 ADD[7:0]@USART_CR2 ADDM7@USART_CR2
7
多处理器通信下的静默模式
静默模式 使能 如何进入
唤醒方式
Wake =0(空闲帧) Wake =1(地址帧)
收到不匹配的地址字节; 或软件置位MMRQ 软件置位MME@CR1(接收方可在静默和活动模式下切换) 软件置位MMRQ
RTOF,接收超时
由RTOR寄存器定义接收超时,以波特率时钟为单位
普通模式下,从最后一个数据收到开始计时 智能卡模式下,从最后一个数据的起始位开始计时 RTOR可以动态地修改,若新值小于当前计数器,立刻置位超时
计数器即使在RE=0时也在计数,但只有RE=1了才会置位RTOF
EOBF,数据块结束标志