打印
[学习笔记]

AC781X UART模块应用笔记

[复制链接]
8696|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 TechHolder 于 2019-9-27 09:32 编辑


AC781X UART模块应用笔记


1 UART模块介绍
1.1 UART特性
1. 全双工,标准非归零格式
    2. 支持DMA传输数据
    3. 可编程89位数据长度,12位停止位,硬件自动生成奇偶校验位
    4. 可选择传输器输出和接收器输入极性
    5. 支持硬件流控制
    6. 支持传输器输出和接收器输入极性
    7. 轮询或中断方式查询状态
    8. 可生成13位分隔符,可选1011LIN功能分隔符检测
    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 例程功能描述

欢迎各位坛友指正,后续会根据问题持续更新。




UART_4.jpg (261.49 KB )

UART_4.jpg

UART_Sample.rar

716.94 KB

使用特权

评论回复

相关帖子

沙发
YZyuan123| | 2019-8-24 09:52 | 只看该作者
求RS485 的例程

使用特权

评论回复
板凳
TechHolder|  楼主 | 2019-8-26 10:30 | 只看该作者

做好立马发上来

使用特权

评论回复
地板
TechHolder|  楼主 | 2019-9-27 09:17 | 只看该作者

485例程已经OK。

UART_Sample.rar

716.94 KB

使用特权

评论回复
5
zlmin| | 2019-10-3 10:20 | 只看该作者
谢谢分享!

使用特权

评论回复
6
YZyuan123| | 2019-10-11 11:58 | 只看该作者
关于RS485,自动方向控制信号UART_RTS的delay1和guard time时长计数与设置的波特率有关,delay1和guard time每个单位的时长为(1/波特率)s。delay1每增加1,延时增加(1/波特率)s;但是guard值为1时,只有大约(1/波特率)s一半的延时时长,guard大于1后,guard值每增加1,延时时长增加(1/波特率)s。比如波特率设置为9600时,UARTn_CNTR的值设置为1时,delay1延时时长大约为104us;但是guard值为1时,延时只有大约60几个us.什么原因?

使用特权

评论回复
7
TechHolder|  楼主 | 2019-10-12 10:02 | 只看该作者
YZyuan123 发表于 2019-10-11 11:58
关于RS485,自动方向控制信号UART_RTS的delay1和guard time时长计数与设置的波特率有关,delay1和guard tim ...

delay1设置为1时延时就是(1/波特率)s,但guard设置为((设置值 - 1)/波特率)s,即设置2时才延时(1/波特率)s时间,设置为1时有部分延时,设置为0时无效。

使用特权

评论回复
8
YZyuan123| | 2019-10-14 15:47 | 只看该作者
TechHolder 发表于 2019-10-12 10:02
delay1设置为1时延时就是(1/波特率)s,但guard设置为((设置值 - 1)/波特率)s,即设置2时才延时(1/波特率) ...

谢谢

使用特权

评论回复
9
绝对润| | 2021-8-26 16:10 | 只看该作者
UART例程,UART1由PB5 PB6改为引脚PA7 PA8都需要改哪些地方呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

219

帖子

3

粉丝