【自学嵌入式: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引脚都要共地
串口通信
- 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信
- 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力

左图是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为低电平,低位先行
- 校验位:用于数据验证,根据数据位计算得来
- 停止位:用于数据帧间隔,固定为高电平

【注】在UART等串行通信中,波特率的基本计算公式为:
波特率=除数时钟频率
- 时钟频率:串口芯片的时钟频率,单位是Hz(赫兹)。
- 除数:用于从时钟频率生成所需波特率的预定值,通常是一个整数或可以通过软件配置的寄存器值。
例如,如果UART设备的时钟频率为16 MHz,所需的波特率为9600 bps,则除数大约为1667(16,000,000 Hz / 9600 bps ≈ 1667)。
数据位最后可以加一个奇偶校验位
串口时序

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号