STM32串口学习总结及USART应用指南
1.基本概念
通信:是指将一个设备的数据发送到另一个设备。
通信协议:制定专门的通信规则,通信双方按照协议规则来进行数据的收发。
常见的通信协议:USART、IIC、SPI、USB、CAN
USART全称为通用同步异步收发器。USART通信也称串口通信。一般使用的是串口异步通信,同步工作只在与其他通信协调时使用(新手一般用不到),所以也叫UART。
全双工:串口通信是有TX,RX两个引脚,表示发送数据和接收数据,所以它是全双工。
异步:使用串口通信时,因为没有时钟信号线,工作频率不一样,为异步工作,所以两个设备使用串口通信时,需求相互规定一下频率(也叫波特率),这样才能进行数据的收发。
2.USART硬件电路
串口相互时的电路连接为:
注意事项:
串口通信时,设备双方的TX与RX要交叉连接。
串口为单端信号通信,指的是VCC与地端参考值来判断电平信号,所以设备双方需要共地,也就是把GND连接起来,这样VCC与GND的差值比较才有意义。
保证相同的电平标准:若电平标准不一样,需要加电平转换芯片。一般从控制器出来的信号为TTL电平。
2.1USART基本结构
收发数据时:发送移位寄存器往TX引脚移位。接收移位寄存器从RX引脚移位。
下图为STM32参考手册中的USART基本结构图
下图为简便理解型结构图
2.2STM32—USART引脚图
2.3串口转换
(这里讲一下串口的应用,便于理解)
下图是三种串口的转换电路:第一个为:USB与串口的通信。第二个为:串口与IIC的通信。第三个为:蓝牙与串口的通信。
下图为USB转串口的电路图,所用的为CH340串口转换芯片。从USB的引脚与CH340芯片的引脚相连,CH340芯片再与串口的引脚相连,从TXD与RXD引脚中完成数据的传输。
3.串口参数
3.1波特率
串口是异步通信,使用需要规定设备双方的波特率,保持一致,才能进行通信。
波特率是指每秒钟传送二进制数码的位数,以bit/s(bps)为单位。
⚫ 常用的波特率有: 9600、 19200、 38400、 57600和115200;
⚫ 波特率为115200, 表示每秒传输115200位,且每一位数据在数据线上持续时间为Tbit = 1/115200 ≈ 8.68us。
3.2起始位与停止位
起始位:标志着一个数据帧的开始,固定为低电平。一般空闲位为高电平,需要起始位为低电平产生一个下降沿,打破空闲位,表示开始进行数据的传输。
停止位:用于数据的间隔,固定为高电平。一个数据的结束,需要停止位为高电平,回到空闲位。停止信号可由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
3.3数据位
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行。有效数据的长度常被约定为 5、 6、 7 或 8 位长。
3.4校验位
校验位:分为三种。无校验;奇校验(置0/1,使九位数据包含奇数个1);偶校验(置0/1,使九位数据包含偶数个1)。
3.5时序图
配合波特率,一位的起始位,8位的数据包,一位的校验位(无校验则么有),一位的停止位(可配置0.5/1.5/2)。
4、STM32软件程序配置
1.时钟配置: 配置UART 外设所需的时钟。这可能涉及设置外设时钟源、时钟分频等。
2.引脚配置: 配置 UART 外设的引脚,包括设置引脚为输入或输出、选择引脚复用功能等。
3.中断配置: 配置与UART 相关的中断,包括中断优先级、使能中断等。
4.1数据发送
首先初始化,开启时钟,引脚配置,(只发送的话不需要中断配置),使能
初始化完成后,调用函数发送数据。使用时,在主函数调用封装的函数即可。
4.2数据发送+接收
接收数据时,进行中断配置,需要进行中断查询,首先开启中断,开启某个(RXNE)标志位到NVIC的输出,然后再配置NVIC。一但RXNE置1后,就会向NVIC申请中断,之后就可以在中断函数里接收数据。
中断函数在启动文件里找,函数中,先判断标准位,如果RXNE置1,就下一步,然后就可以读取数据。
参考:
STM32入门教程-2023版 细致讲解 中文字幕
常见的通讯协议总结(USART、IIC、SPI、485、CAN)