【自学嵌入式:stm32】USART串口协议

USART串口协议

关于通信可参考:
https://www.cnblogs.com/qinruiqian/p/19017678
https://www.cnblogs.com/qinruiqian/p/19016638

通信接口

  • 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统
  • 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发
名称 引脚 双工 时钟 电平 设备
USART TX(数据发送脚)、RX(数据接收脚) 全双工 异步 单端 点对点
I2C SCL、SDA 半双工 同步 单端 多设备
SPI SCLK、MOSI(主机输出数据脚)、MISO(主机输入数据脚)、CS(片选,用于指定通信的对象) 全双工 同步 单端 多设备
CAN CAN_H、CAN_L(一对差分数据脚) 半双工 异步 差分 多设备
USB DP、DM(一对差分数据脚) 半双工 异步 差分 点对点

【注】你可以把差分数据脚想象成 “一对双胞胎信使”。
平时如果只派一个信使送信(就像单根线传信号),路上可能遇到刮风下雨(干扰),信使可能跑偏、变慢,接收方就可能认错信息。
但差分数据脚是派两个信使一起走,他们肩并肩,保持固定的 “相对距离” 来传递信息 —— 比如:
要传 “往前走”,哥哥比弟弟超前半步;
要传 “往后退”,弟弟比哥哥超前半步;
不送信时,两人并排走,距离为 0。
关键是:不管路上遇到什么干扰(比如一阵风把两人都吹得晃了一下),他们之间的 “相对距离” 没变。接收方只看这个 “相对距离”,就不会认错信息。
所以,差分数据脚就是两根一起工作的线,靠 “彼此的差别” 传信号,不怕外界干扰,很靠谱。

USART、I2C和SPI都是单端通信,它们的GND引脚都要共地

串口通信

  • 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信
  • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力

image

左图是CH340芯片,可以将串口转为USB协议,中间图是陀螺仪姿态模块,可以测量角速度加速度这些姿态参数,它左右各有四个引脚,一边是串口的引脚,一边是I2C通信的引脚,右图是蓝牙串口模块,下面四个脚是串口通信引脚

硬件电路

  • 简单双向串口通信有两根通信线(发送端TX和接收端RX)
  • TX与RX要交叉连接
  • 当只需单向的数据传输时,可以只接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片
    image

电平标准

  • 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:

  • TTL电平:+3.3V或+5V表示1,0V表示0

  • RS232电平:-3-15V表示1,+3+15V表示0

  • RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号,抗干扰性强,适合远距离通信)

串口参数及时序

  • 波特率:串口通信的速率
  • 起始位:标志一个数据帧的开始,固定为低电平
  • 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
  • 校验位:用于数据验证,根据数据位计算得来
  • 停止位:用于数据帧间隔,固定为高电平

image

【注】在UART等串行通信中,波特率的基本计算公式为:

波特率=除数时钟频率​

  • 时钟频率:串口芯片的时钟频率,单位是Hz(赫兹)。
  • 除数:用于从时钟频率生成所需波特率的预定值,通常是一个整数或可以通过软件配置的寄存器值。
    例如,如果UART设备的时钟频率为16 MHz,所需的波特率为9600 bps,则除数大约为1667(16,000,000 Hz / 9600 bps ≈ 1667)。

数据位最后可以加一个奇偶校验位

串口时序

image

posted @ 2025-08-19 10:01  秦瑞迁  阅读(29)  评论(0)    收藏  举报