STM32F103C8T6 USART串口协议
1 通信接口
- 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统
- 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发
名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 |
USART | TX、RX | 全双工 | 异步 | 单端 | 点对点 |
I2C | SCL、SDA | 半双工 | 同步 | 单端 | 多设备 |
SPI | SCLK、MOSI、MISO、CS | 全双工 | 同步 | 单端 | 多设备 |
CAN | CAN_H、CAN_L | 半双工 | 异步 | 差分 | 多设备 |
USB | DP、DM | 半双工 | 异步 | 差分 | 点对点 |
USART(通用同步/异步收发传输器):
使用TX(发送)和RX(接收)引脚进行全双工通信,意味着可以同时发送和接收数据。
采用异步时钟,没有专用的时钟线,数据位和停止位用于同步。
信号电平是单端的,即信号通过单一导线传输。
通常用于点对点通信,即连接两个设备。
I2C(集成电路间通信):
使用SCL(时钟线)和SDA(数据线)进行半双工通信,这意味着在同一时间内只能发送或接收数据。
是一种同步通信协议,数据传输与时钟信号同步。
信号电平也是单端的。
支持多设备通信,设备通过地址进行识别。
SPI(串行外设接口):
使用SCLK(时钟线)、MOSI(主设备输出/从设备输入)、MISO(主设备输入/从设备输出)和CS(片选)引脚进行全双工通信。
是一种同步通信协议,数据传输与时钟信号同步。
信号电平是单端的。
支持多设备通信,每个设备通过独立的片选信号进行选择。
CAN(控制器局域网络):
使用CAN_H(高电平)和CAN_L(低电平)引脚进行半双工通信。
是一种异步通信协议,没有专用的时钟线,数据位和停止位用于同步。
信号电平是差分的,即信号通过一对导线传输,提高了抗干扰能力。
支持多设备通信,常用于汽车和工业控制系统。
USB(通用串行总线):
使用DP(数据正)和DM(数据负)引脚进行半双工通信。
是一种异步通信协议,数据传输与时钟信号同步。
信号电平是差分的,即信号通过一对导线传输,提高了数据传输的可靠性。
通常用于点对点通信,连接计算机和外部设备。
2 串口介绍
- 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信
- 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力
3 硬件电路
- 简单双向串口通信有两根通信线(发送端TX和接收端RX)
- TX与RX要交叉连接
- 当只需单向的数据传输时,可以只接一根通信线
- 当电平标准不一致时,需要加电平转换芯片
4 电平标准
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
- TTL电平:+3.3V或+5V表示1,0V表示0
- RS232电平:-3~-15V表示1,+3~+15V表示0
- RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)
5 串口参数与时序
- 波特率:串口通信的速率
- 起始位:标志一个数据帧的开始,固定为低电平
- 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
- 校验位:用于数据验证,根据数据位计算得来
- 停止位:用于数据帧间隔,固定为高电平
6 串口时序
7 串口外设
7.1 USART简介
通用同步异步收发器USART(Universal Synchronous/Asynchronous Receiver/Transmitter)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据 组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。 使用多缓冲器配置的DMA方式,可以实现高速数据通信。
- USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里
- 自带波特率发生器,最高达4.5Mbits/s
- 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
- 可选校验位(无校验/奇校验/偶校验)
- 支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
- STM32F103C8T6 USART资源: USART1、 USART2、 USART3
7.2 基本结构
分析:
该图展示了一个基于GPIO的串行通信流程,其中PCLK2/1作为时钟信号输入到波特率发生器,生成所需的通信速率,然后分别控制发送控制器和接收控制器。发送控制器将数据从发送数据寄存器TDR通过发送移位寄存器发送出去,而接收控制器则从接收移位寄存器读取数据并存入接收数据寄存器RDR。最终,GPIO引脚负责实际的发送(TX)和接收(RX)操作,实现数据的串行通信。
7.3 数据帧
9位字长:
1个起始位、8个数据位和1个停止位。
图中显示了数据帧的传输过程,其中M位被设置,可能的奇偶检验位用于错误检测。
在数据帧之后有一个空闲帧,表示没有传输活动的时间段。
断开帧表示传输的结束,此时线路可能返回到空闲状态。
起始位和停止位用于帧同步,LBCL位控制最后一个数据的时钟脉冲。
8位字长:
1个起始位、7个数据位和1个停止位。
未设置M位,表示没有额外的第9位。
同样展示了数据帧、空闲帧和断开帧。
起始位和停止位用于帧同步,LBCL位控制最后一个数据位的时钟脉冲。
这张图片展示了在串行通信中配置不同数量的停止位对数据帧的影响。图中描述了四种不同的停止位配置方式,每种方式都基于8位字长(未设置M位,即没有第9位)。
a) 1个停止位:
数据帧由1个起始位、8个数据位和1个停止位组成。
停止位用于标识一个数据帧的结束,并为下一个数据帧的起始位提供间隔。
b) 1½个停止位:
数据帧由1个起始位、8个数据位和1½个停止位组成。
这种配置不常见,1½个停止位可能用于特定的通信协议,以提供更短的帧间隔。
c) 2个停止位:
数据帧由1个起始位、8个数据位和2个停止位组成。
增加停止位的数量可以提高数据帧之间的区分度,减少帧间干扰的可能性。
d) %个停止位:
这种配置可能表示可编程的停止位数,%可能代表一个变量或占位符号,表明停止位数可以根据需要进行配置。
总的来说,停止位的配置对串行通信的可靠性和效率有重要影响,适当的停止位配置可以优化数据传输性能。
7.4 起始位侦测
图252展示了串行通信中起始位侦测的工作原理,其中接收信号线在空闲状态下保持高电平,当检测到起始位时信号线从高电平变为低电平,理想的采样时钟在信号稳定后的特定时刻对信号线进行采样,而实际采样时钟可能存在偏差,图中还描述了判断起始位的条件,即通过检测下降沿以及确保每3位中至少有2个逻辑0来识别起始位,数据采样发生在位时间长度的中间,确保了数据的准确采集,整个机制对于实现可靠的串行数据传输和帧同步非常关键。
7.5 数据采样
上图描述了串行通信中的数据采样过程,其中接收信号线在起始位后开始传输数据,采样时钟在每个数据位的中间时刻进行采样以减少噪声影响,图中将一个数据位的时间长度分为16等分,分别在7/16和6/16时刻进行采样,确保数据位能被准确读取,从而实现可靠的串行数据传输。
7.6 波特率发生器
- 发送器和接收器的波特率由波特率寄存器BRR里的DIV确定
- 计算公式:波特率 = fPCLK2/1 / (16 * DIV)
7.7 数据模式
- HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
- 文本模式/字符模式:以原始数据编码后的形式显示
7.8 HEX数据包
7.9 文本数据包
7.10 HEX数据包接收
7.11 文本数据包接收