打印
[单片机芯片]

CH32L103 USART应用

[复制链接]
1877|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
L-MCU|  楼主 | 2024-7-18 15:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 L-MCU 于 2024-7-18 15:51 编辑

1、USART介绍
关于CH32L103 USART的主要特征以及相关概述,具体可见CH32L103应用手册介绍,在此不再赘述。
USART,全称Universal Synchronous/Asynchronous Receiver/Transmitter,即通用同步异步收发器,支持全双工或半双工的同步或异步通信,一般使用异步通信方式多一些,作为UART使用。USART一般用于MCU与外部设备或模块之间的通信以及MCU开发过程中的打印调试等。

2、USART通信协议
UART通信
USART一般作为UART使用,UART通信仅需两根线:发送数据线(Tx)以及接收数据线(Rx)。
通信过程中,数据以数据包的形式进行发送和接收,数据包中包含起始位、数据位和停止位。如下图,是对串口通信过程数据的抓包。
通过上位机与MCU通信进行数据的收发,其中通道1抓取的是MCU RX引脚的数据,通道0抓取的是MCU TX引脚的数据。
由串口调试助手可知,此次串口通信波特率为115200,8位数据位,1个停止位,无奇偶校验位。
串口数据传输以数据包的形式传输,包含起始位、数据位、停止位,下图为1个数据包的波形:
由图可知:
起始位是1个位周期(每一位占用的时间)的低电平,此处串口通讯波特率为115200,因此1个位周期大约是8.7us;
数据位配置是8位,数据为0x61,根据低位在前(LSB)标准,因此这8位数据是1000 0110,即0x61;
停止位配置的是1个停止位,因此此处停止位就是1个位周期的高电平。

LIN通信
CH32L103的USART是支持LIN的。关于LIN,即Local Interconnect Network,局部互联网络总线,是一种针对汽车分布式电子系统而定义的低成本的串行通讯网络。LIN总线采用的是单线传输形式,总线电平一般为12V,传输速率最高限制为20kbps。由于物理层的限制,一个LIN网络最多可以连接16个节点,无需仲裁。LIN总线逻辑电平分为显性电平和隐性电平,其中显性电平为逻辑0,隐性电平为逻辑1.
下图是抓取LIN通信的波形,根据该波形对LIN通信协议进行介绍
LIN总线报文帧由报文头(Header)和报文响应(Response)两部分组成。
报文头(Header)由间隔段、同步段以及受保护段组成;
报文响应(Response)由数据段(1-8个字节)、校验段组成。

报文头:
(1)同步间隔段:
在上图中,Header Break表示同步间隔段,同步间隔段由同步间隔和同步间隔段间隔符组成,表示一帧报文的起始,由主节点发出。同步间隔段是唯一一个不符合USART通信的段。
同步间隔:由至少13位显性电平(逻辑0)组成;
同步间隔段间隔符:由至少持续1位隐性电平(逻辑1)组成;
同步间隔段具体如下:
其中,同步间隔13位显性电平,同步间隔段间隔符1位隐性电平。
由图中注意到,在同步间隔段最后还有2位的隐性电平,为Inter Byte Space。Inter Byte Space为字节间隔。在每一段后面都会跟一个字节间隔。
(2)同步段
在上图中,Header Sync表示同步段。同步段由1位起始位+8位数据位+1位停止位组成,用于确保所有从节点使用与主节点使用相同的波特率发送接收数据。具体如下图:
其中,8位数据位固定为0x55,且LSB在前,因此0x55二进制即为 1010 1010.
(3)受保护段
在上图中,Protected ID表示受保护段。其中,前6位表示帧ID(Frame ID),加上2位奇偶校验位后表示受保护段。具体如下图:
图中,最开始(绿点部分)为1位起始位,显性电平;接下来是受保护段,包含6位帧ID和2位奇偶校验,奇偶校验公式如下:
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬ (ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
其中“⊕”代表“异或”运算,“¬”代表“取非”运算。
以0x21(1000 01)为例:
P0=1 ⊕ 0⊕ 0 ⊕ 0=1;
P1= ¬ (0 ⊕ 0 ⊕ 0 ⊕ 1)=0;
其中,帧ID范围为0x00到0x3F,共64个,其中ID:60-61为诊断ID,ID:62-63为预留ID。此处为0x21,由于LSB在前,二进制表示为1000 01。

报文响应
(1)数据段
在上图中,Data1-7均属于数据段。数据段具体如下图:
图中,数据段包含1位起始位+8位数据位+1位停止位。数据位LSB在前,0x12则表示为0100 1000。
(2)校验和段
校验和段用于校验接收到的数据是否正确,分为经典校验(Classic Checksum)和增强校验(Enhance Checksum)。经典校验仅校验数据场,适用于诊断帧和与 LIN1.x 从机节点通信;增强校验校验标识符场和数据场,适用于与 LIN2.x 从机节点通信(诊断帧除外)。采用标准型校验和还是增强型校验和由主机节点管理,发布节点和各收听节点根据帧ID来判断采用哪种校验和。
本次LIN通信传输的数据为0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,PID为0x61(注意此处PID要加上奇偶校验位,6位帧ID 1000 01,2位奇偶校验10,加在一起就是1000 0110,即0x61),校验和采用增强校验,8个数据加上PID为:
0x11+0x12+0x13+0x14+0x15+0x16+0x17+0x18+0x61=0x105,即十进制为261,261超过255,再减去255,即为6,换算成二进制即为0000 0110,取反之后为1111 1001,换算成十六进制即为0xF9.

3、USART应用
CH32L103 EVT提供了USART基本应用例程,如下图。附件例程包含了串口常用的收发例程以及LIN通信例程,可以参考一下。

4、USART应用注意事项
(1)关于串口波特率的计算
波特率计算公式如下:
TX/RX波特率=FCLK/(16*USARTDIV)
USARTDIV=DIV_Mantissa+(DIVFraction/16)
以USART1波特率115200为例,FCLK为72M,则USARTDIV值为39.0625,即
39.0625=DIV_Mantissa+(DIVFraction/16)
其中,DIV_Mantissa表示整数部分,为36,DIVFraction/16表示小数部分,为0.0625,则DIVFraction的值为1.
(2)关于串口硬件流控制RTS、CTS引脚意义
对于MCU本身来说,当开启硬件流控时,RTS、CTS初始化配置时:
RTS建议配置为复用推挽输出,CTS建议配置配置为浮空输入或带上拉输入,如下图
如上图,
对于MCU来说:
RTS为输出信号,用于表示MCU串口是否准备好接收数据,若输出信号为低电平,则说明MCU串口可以接收数据,请求发送数据。当接收寄存器已满时,RTS将被设置为高电平
CTS为输入信号,用于判断MCU串口是否可以向对方发送数据,若接收信号为低电平,则说明MCU串口可以向对方发送数据。若为高电平则在发送当前数据帧之后停止发送
(3)关于串口空闲中断触发机制及时间
串口空闲中断是在监测到数据接收后(即串口的RXNE位被置位)开始检测,当总线上在一个字节对应的周期内未再有新的数据接收时,触发空闲中断IDLE位被硬件置1。这个时间跟串口的波特率设置有关。



CH32L103 USART应用.zip

3.87 MB

使用特权

评论回复
沙发
tpgf| | 2024-8-1 14:45 | 只看该作者
usart和spi通讯方式是包含和被包含的关系吗

使用特权

评论回复
板凳
renzheshengui| | 2024-8-6 07:46 | 只看该作者
这种串口传输数据的最大速度收到什么因素的影响呢

使用特权

评论回复
地板
wakayi| | 2024-8-6 13:59 | 只看该作者
同步通讯是必须要有时钟线的

使用特权

评论回复
5
paotangsan| | 2024-8-8 08:24 | 只看该作者
串口通讯的起始位和停止位都是底层自己自动识别的吧

使用特权

评论回复
6
keaibukelian| | 2024-8-8 20:22 | 只看该作者
并不是串口的所有引脚都需要用上是吗

使用特权

评论回复
7
heimaojingzhang| | 2024-8-9 09:08 | 只看该作者
串口空闲中断的用处是什么呢

使用特权

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

本版积分规则

17

主题

24

帖子

0

粉丝