本帖最后由 TechHolder 于 2019-9-27 09:32 编辑
AC781X UART模块应用笔记
1 UART模块介绍
1.1 UART特性
1. 全双工,标准非归零格式
2. 支持DMA传输数据
3. 可编程8或9位数据长度,1或2位停止位,硬件自动生成奇偶校验位
4. 可选择传输器输出和接收器输入极性
5. 支持硬件流控制
6. 支持传输器输出和接收器输入极性
7. 轮询或中断方式查询状态
8. 可生成13位分隔符,可选10或11位LIN功能分隔符检测
9. 支持RS485自动控制方向
1.2 UART功能
UART功能是逐位发送和接收串行数据,完整的一帧数据,包括起始位,数据位,奇偶校验位,停止位和保护间隔。 如果在接收过程中发生相关事件,则状态位DR,OE,PE,FE,BI和NE会在stop1位后立即置为1。 图 1‑1 UART接收流程
1.2.1 RS485功能 与UART功能相比,RS485功能多了一个自动方向控制信号UART_RTS,其在接收数据时默认为低电平,发送数据时默认为高电平。由于采用半双工,RS485在同一时刻只能实现发送或接收操作。有两个延迟,delay1用于在实际传输数据之前上拉UART_RTS信号,而guard_time用于在数位传输全部完成后下拉UART_RTS信号。在实际应用中,PCB布线延迟可能导致UART_RTS在UART_TX之后变为高电平,这会导致第一个数据位损坏。
图1‑2 单字节数据传输
1.2.2 LIN功能 UART LIN能够传输分隔符,同步域和数据。当UART接收到10或11位0时,UART LIN逻辑检测单元将其视为LIN帧的有效分隔符,LIN分隔符标志FBRK由硬件置1,表示检测到了有效的LIN分隔符。LIN分隔符不是数据,不会存储在RX数据寄存器或FIFO中。如果LABAUDEN设置为1,则同步域期间执行自动波特率检测,并且自动波特率检测在第5个上升沿之后完成;如果LABAUDEN设置为0,同步域0x55被当做数据存储在RX寄存器或FIFO中。同步域之后,数据流就是有效数据,并由UART无差别接收。
1.2.3 休眠唤醒 MCU进入休眠之后,UART模块接收数据能够唤醒MCU。 表 1‑1 UART支持唤醒低功耗模式 在进入休眠模式之前,需要对唤醒源进行配置,需要在SPM对应寄存器中使能期望的唤醒源,UART模块默认是禁能状态。调用库SPM_EnableModuleWakeup(SPM_MODULE_UARTx)使能UART模块唤醒,就能将MCU从休眠模式中唤醒,Standby模式除外。进入stop模式后,UART模块将关闭并复位配置,因此,每次MCU被唤醒后,需要重新初始化UART模块以正常收发数据。
2 驱动库 2.1 寄存器驱动
3 例程介绍 3.1 总述 共5个子例程用以阐述UART的各种功能使用,包括基本收发数据,DMA传输串口数据,UART 485功能,UART_LIN功能,UART唤醒休眠MCU。每个子例程对应着一个宏定义,通过UART_SAMPLE_SEL选择。
3.2 例程功能概述 表 3‑1 例程功能描述
欢迎各位坛友指正,后续会根据问题持续更新。
|