前言
本系列文章统一围绕STM32F103C8T6最小系统开发板进行记录,如涉及其他开发板将会特别说明。
串口基本概念
串行接口与并行接口
- 串行接口:数据一位一位地顺序传送,只要一对传输线就可以实现双向通信,降低成本,适用于远距离通信,但传送速度较慢。
- 并行接口:一次同时传输多位数据,同一时刻传输的数据量大。
单工、半双工和全双工
- 单工:数据只在一个方向上传输,不能实现双方通信。如广播、电视。
- 半双工:允许数据在两个方向上传输,但是同一时间数据只能在一个方向上传输,其实际上是切换的单工。如对讲机(只能单向通话)。
-
全双工:允许数据在两个方向上
同时
传输。如手机通话。
异步与同步
-
异步通信
- 以字符为单位传送信息。
- 相邻两字符间的间隔是任意长,字符间异步,字符内部各位同步。
- 每帧信息格式由4部分组成:起始位,数据位,奇偶校验位,停止位。
- 代表:UART、RS485、CAN等。
- 用途:适用于短距离、速率不高的场合下。
-
同步通信
- 以数据块为单位传送信息。
- 在一个数据块(信息帧)内,字符与字符间无间隔。
- 接收时钟与发送时钟严格同步,在没有信息要发送时,需要填充上空字符。
- 每帧信息格式由3部分组成:起始位,数据位,奇偶校验位。
- 代表:OSI数据链路层、SPI、IIC。
- 用途:主要应用在通信网中,有大批量数据需要传输。
STM32的USART模块
USART与UART
- USART:通用同步/异步串行收发器。在单片机中可以理解为一个模块,可以根据实际需求配置成同步模式,也可以将其配置为异步模式(UART)。
- UART:通用异步串行接收/发送器。即为单片机常说的“串口”。
基本参数
-
波特率(BaudRate):有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。
- 典型的“波特率”:300,1200,2400,9600,19200,38400,115200等。
- 比特率:单位时间内传输或处理的比特的位数,写作bps(bit per second)。
- 波特率 = 比特率 x 调制一个码元所需要的比特数。
- 数据字长度(Word Length):有效数据的长度,8位或9位 。
- 停止位(Stop Bit):一个字符数据的结束标志,1或2位 。
- 硬件流控:用于解决发送端与接收端速度不匹配的问题,控制数据传输的进度。
- 校验位(Parity Bit):可为奇校验、偶校验或无校验。
工作原理
接收数据:
RX->接收移位寄存器->接收数据寄存器(RDR)->CPU发送数据
CPU->发送数据寄存器(TDR)->发送移位寄存器->TX
USART寄存器
USART_SR状态寄存器
通过不同位寄存器的数值判断USART处于的状态
- RXNE:读数据寄存器非空
- TC:发送完成标志
- TXE:发送数据寄存器空,数据是否被送入移位寄存器中
USART_DR数据寄存器
存放USART发送和接收的数据
USART_BRR 波特比率寄存器
设置波特率
USART_CR1 控制寄存器1
配置USART参数:
- 位9:校验位配置(奇/偶)
- 位10:校验位使能
- 位12:字长配置
- 位13:USART使能