目录
一、简介
命名:USART(通用同步收发器)
UART (通用异步收发器)
引脚:TX 发送引脚
RX 接收引脚
串口通信的设备TX和RX交叉相连
特性:全双工,设备之间可以相互收发数据,接收和发送可以同时进行
时钟:同步,使用同一个时钟频率
异步,时钟频率不一致,需要额外约定通信速率
电平:单端,信号的高低电平取决于对GND的电压差
设备:点对点
二、连接方式
不同设备TX和RX交叉连接
VCC和GND正常连接
通信的高低电平取决于对GND的电压差,当两设备电平标准不一致时需要加电平转换芯片

三、串口参数与时序
1.参数
波特率:串口通信的速率
(每秒钟传输的二进制数个数,bit/s)
起始位:标志一个数据帧的开始,固定为低电平
数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
校验位:用于数据验证,根据数据位计算得来
奇校验:数据位 + 校验位共有奇数个 1
偶校验:数据位 + 校验位共有偶数个 1
停止位:用于数据帧间隔,固定为高电平
1帧数据的组成1:1位起始位 + 8位数据位 + 1位停止位 = 10位数据
1帧数据的组成2:1位起始位 + 8位数据位 + 1位校验位 + 1位停止位 = 11位数据
2.时序
空闲状态高电平
将电平拉低产生下降沿 转为起始状态
正常发送数据(8/9bit)
将电平拉高(因为发送数据的缘故不一定有上升沿,重点在于电平状态) 转为停止状态

四、STM32实现串口通信的方法(主要是异步通信)
1.使用软件模拟
例如要实现波特率为9600的数据传输,不必使用固定的IO口
发送时只需使用定时器每 1s / 9600 = 104us 按照数据帧的要求调用 GPIO_WriteBit() 对配置的引脚置高低电平即可,
读取时使用外部中断监测表示起始信号的下降沿,定时调用 GPIO_ReadInputDataBit() 对配置的引脚读取每一位高低电平最终拼成1帧数据即可。
2.使用硬件外设
根据数据寄存器内的字节数据,自动生成数据帧时序通过固定的TX引脚发出
通过固定的RX引脚将收到的数据帧时序,拼接成一个字节存放在数据寄存器内
即通过读写数据寄存器实现串口通信
自带波特率发生器(对系统时钟分频)
可配置数据帧长度、停止位长度
可配置校验位
支持同步模式、硬件流控制

杂谈
1.通信的目的
将一个设备的数据传送到另一个设备,扩展硬件系统
2.常见可以使用串口通信的模块
USB转串口模块
陀螺仪(既支持USART又支持IIC)
蓝牙串口模块
3.串口常用电平标准
TTL: +3.3V或+5V表示1, 0V表示0
RS232: -3~-15V表示1, +3~+15表示0
RS485:两线压差+2~+6V表示1, -2~-6V表示0 (差分信号)
4.串口从波形反推数据
因为采用低位先行:数据从低位开始发送
0xF=00001111 发送顺序 11110000
所以从波形反推数据方法1------>波形从右往左看,数据从高往低写
所以从波形反推数据方法2------>波形从左往右看,数据从低往高写
5.奇偶校验
奇校验:数据位 + 校验位共有奇数个 1
偶校验:数据位 + 校验位共有偶数个 1
缺陷:当同时有偶数个数据位发生变化则检测不出来数据出错了
6.STM32F1对于输入噪声的处理及波特率计算
对每一位信号都进行16次采样,将第8、9、10次采样位置定为被采信号的中间位置,并且比较这三次采样01的个数确定信号类型
由此可得STM32F1波特率公式
波特率 = (一或二分之一)时钟频率 / (16 * 分频系数)
多除以16是因为每bit数据都被采样了16次
7.硬件流控制
在硬件电路中多使用一条信号线,用于发送速度的控制,防止发送快而接收慢导致的数据覆盖问题