1、摘要
在通信中,用户经常会处理不定长的数据包。发送数据时,只需要根据指定长度发送数据包,处理相对简单,而接收数据时则需要检查数据包的结束。
本篇应用笔记主要介绍HC32F4A0系列通用同步异步收发器(Universal Synchronous Asynchronous Receiver Transmitter,USART)的UART模式,结合定时器Timer0,实现接收不定长数据。
2、UART 简介
HC32F4A0 系列 MCU 搭载通用串行收发器模块(USART)10 个单元。全通道支持通用异步串行通信接口 (Universal Asynchronous Receiver Transmitter,UART)。UART(USART_1,USART_2,USART_6,USART_7)和 Timer0 模块配合支持 UART 接收 TIMEOUT 功能。
2.1 UART 主要特性
●数据长度可编程:8 位/9 位
●校验功能可配置:奇校验/偶校验/无校验
●停止位可配置:1 位/2 位
●时钟源可选:内部时钟源(内部波特率生成器生成的时钟)/外部时钟源(USARTn_CK 管脚输入的时钟)
●接收错误:校验错误,帧错误,上溢错误
●支持多个处理器间通信
●内置数字滤波器
●支持接收数据超时功能
●单元 1 支持停止模式唤醒功能
3、UART 接收超时功能
UART 接收数据停止位被检测时 TIMEOUT 计数器启动,经过设定的 TIMEOUT 时间(设定单位为接收位数)后未检测到下一帧接收数据时,发生 TIMEOUT,如果此时 CR1.RE=1,则TIMEOUT 状态位 USARTn_SR.RTOF 置位,如果此时 USARTn_CR1.RE=0,则等待USARTn_CR1.RE=1 后 TIMEOUT 状态位 USARTn_SR.RTOF 置位。
TIMEOUT 计数器采用 Timer0 模块的计数器,具体对应关系如下:
USART1:Timer0 Unit1 A 通道
USART2:Timer0 Unit1 B 通道
USART5:Timer0 Unit2 A 通道
USART6:Timer0 Unit2 B 通道
TIMEOUT 功能 Timer0 比较计数器值设定:
Timer0 为 16 位计数器,计数时钟最大可以选择 1024 分频,TMR0_CMPA<B>R 值设定计算公式如下:
CMPA<B>R: TMR0_CMPA<B>R 寄存器值
RTB: Receive Timeout Bits
CKDIRA<B>: TMR0.BCONR.CKDIVA<B>位寄存器值
4、UART 不定长数据接收
4.1 UART 接收不为空和超时标志设置时序
UART 接收数据停止位被检测时超时计数器启动,经过设定的超时接收位数后未检测到下一帧接收数据时,将置位接收超时标志 RTOF。
4.2 工作流程
4.2.1 定时器 Timer0 配置
样例代码中 Timer0 操作流程如下图所示:
|