——
参考书目:《嵌入式系统原理及应用 第3版》 马维华 北京邮电大学出版社
在开发过程中,通常用USART来打印调试信息。
UART/USART应用基础
USART和UART是一种硬件设备,本身并不是协议,但具有协议的特征,相当于异步串口通信协议。
UART与USART的区别
串口分为异步串口和同步串口。
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行收发传输器,既可以用于同步串行通讯,也能用于异步串行通讯。
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器,只能用于异步串行通信。
当进行异步通信时,这两者是没有区别的。本文主要以UART为例。
UART结构
UART双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。
UART由控制单元、波特率产生器、UART接收器、UART发送器组成。
UART的主要功能为将发送时存放在发送缓冲寄存器中并行格式的数据,在控制单元和波特率发生器的同步之下,通过发送移位寄存器以串行方式发送出去,接收时把并行格式的数据在控制单元和波特率发生器的脉冲同步之下,经过移位寄存器移位变换为并行数据保存到接收缓冲器中。
发送器/接收器可采用先进先出(FIFO)模式或普通模式。
——
串口按位发送和接收字节。
发送器在FIFO模式下,当N个字节(由嵌入式芯片设置,不同种类数值不同)全部到位后才进行发送。查询发送方式时必须要等待发送缓冲器为空才能发送下一个数据。
接收器在FIFO模式下,只有缓冲器满,才引发接收中断并置位接收标志;在普通模式下,接收到一个字符就引发接收中断并置标志位。
UART通信
接线方法
UART共需要3条线,以帧的形式发送和接收串行数据:
- RX:接收端(接收数据输入引脚),与从机TXD相连
- TX:发送端(接收数据输入引脚),与从机RXD相连
- GND:公共地,用于电平参考
与MCU通信
两个MCU进行通信的接线方法如下图所示:
在短距离通信范围内,由于UART与UART间电平完全一致,可直接相连(如上图),无需进行转换;
如果要延长通信距离,可采用光耦隔离的方式。
在调试的时候, 多数情况下只引出rx,tx即可,如果只需要发送或接收(单工),可只接一个。
TXD:Transmit(tx) Data,发送数据
RXD:Receive(rx) Data,接收数据
与PC通信
当MCU与PC端进行通信时,需要使用TTL-USB模块,这是因为MCU使用的串口是TTL串口,而PC使用USB串口。
图源自网络。
接线与同MCU通信时类似,MCU的TXD与转换模块的RXD相连;MCU的RXD与转换模块的TXD相连;MCU的GND与转换模块的GND相连.
在PC领域中USB已取代USART的地位,但在嵌入式领域中USART仍然发挥着重要作用。
UART理论基础
串口通信分为物理层与协议层。
协议层
UART格式
由于没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。
UART 串口传输的数据格式如下图所示:
一帧完整的数据帧由七十位、数据为、校验和停止位构成。
UART 串口每次传输数据开始都有一个起始位(逻辑值为0),通知对方数据传输开始;中间为要传输的实际数据;奇偶检验位用来校验代码传输正确性,可省略;结束位(停止位)表示一个数据帧传输结束。
物理层
UART与串口
串行接口(Serial Interface)简称串口,也称串行通信接口或串行通讯接口( cluster communication port,即COM口,现在一般指电脑上的串口,也属于UART),是采用串行通信方式的扩展接口。串行是指数据一位一位地顺序传送,与并行相对。
串口指的物理接口形式,嵌入式里面说的串口,一般是指UART口。
某一串口按电气标准还可分为TTL、RS-232-C、RS-422、RS485等。
UART应用TTL、RS232/RS485电平标准
UART并没有规范该使用什么电平。
由MCU引脚直接引出的一般是 TTL (Transistor-Transistor Logic)电平。TTL电平信号规定,+5V(3.3V以上即可)等价于逻辑“1”,0V等价于逻辑“0”(采用二进制来表示数据时)。在PC中的UART使用的是RS232电平。
若加入一个合适的电平转换器(常用芯片如PL2303、CH340),可实现RS232/RS485相互转换;或通过MAX232芯片实现TTL/RS232相互转换。
RS232为电气标准,DB9为接口标准。下图为DB9母头,图片摘自网络。
STM32 USART
STM32F4自带的USART支持同步单向通信和半双工单线通信、支持 LIN(局域互连网络)、智能卡协议与 IrDA (红外线数据协会)SIR ENDEC 规范,以及调制解调器操作 (CTS/RTS)和多处理器通信。
对UART的应用包括:
- 初始化UART
- 接收数据
- 发送数据
初始化
初始化包括引脚配置、波特率设置、字符格式设置、使能相关中断。
发送和接收
由于接收是随机和被动的,而发送时主动的,因此通常接收采用中断方式,发送采用查询方式。
中断接收时,使能接收中断,一旦由接收的数据,可在中断服务函数中读取。
发送数据时,首先将待发送的数据写入数据寄存器中,然后等待发送结束。
奇偶校验
将 USART_CR1 寄存器中的 PCE 位置 1,可以使能奇偶校验控制;在PS位中设置为 0 则为偶校验,否则为奇校验。
USART中断
以下为中断事件,中断事件后为使能控制位,在USART_CR1~3中配置,如果相应的使能控制位置 1,则这些事件会生成中断。
● 发送期间:发送完成TXEIE、发送数据寄存器为空TCIE。
● 接收期间:上溢错误ORE、接收数据寄存器不为空RXNEIE