STM32CubeMX串口配置
STM32CubeMX串口配置
- 一,Mode
- 1,Asynchronous(异步模式)
- 2,其他模式
- 3,异步通信中的流控
- 二,Configuration
- 参数配置(Parameter Settings)
- 1,Basic Parameters
- 2,Advanced Parameters
在左边配置选项中选择Connectivity(通信),以串口1为例
一,Mode
串口的配置分为两大部分:Mode和Configuration,我们先介绍Mode部分
如果Mode选择Disable,那么串口对应的引脚就默认是普通的GPIO引脚
1,Asynchronous(异步模式)
一般情况下,我们使用的就是异步模式,也是我们常说的“UART“(其中这个A就表明异步模式比较常用),我在这里也只介绍异步模式
那么两台设备如何通过异步模式进行通信呢?
1,首先我们需要两根线传递数据:TX(发送) 和 RX(接收)
2,其次我们需要确保两者交流的速度(波特率)相同(一个发的快,另一个接的慢就飞飞了!)
3,然后我们还需要规定一帧数据的结构(这样两台设备可以默契的知道什么时候开始,什么时候停止,以及某一位数据的含义即解析数据):一个典型的数据帧如下
4,最后,我们的通信协议规定好了,但是串口怎么收发数据呢
串口“发送”数据的全过程:
数据首先被写入数据寄存器DR
,硬件会立刻将DR
中的数据搬到移位寄存器SR
中
SR
会将数据1位1位(1bit1bit,1比特1比特)地发送到TX引脚,发送速度和发送顺序是什么样的呢?
顺序是从左到右:比如有一帧数据是一个起始位 + 8个数据位 + 停止位,串口会先发送起始位,然后是数据位0…最后是停止位
起始位(0) → 数据位0(0) → 数据位1(1) → 数据位2(0) → 数据位3(1)→ 数据位4(1) → 数据位5(0) → 数据位6(1) → 数据位7(0) → 停止位(1)
速度是:1 / 波特率 (秒)发送一位数据,也就是1秒发送波特率(数值大小)个bit
串口又是怎么根据波特率BaudRate大小得到发送速度的呢?
自己思考
2,其他模式
以下模式用到再说:
Synchronous
Single Wire (Half-Duplex)
Multiprocessor Communication
IrDA
LIN
SmartCard
3,异步通信中的流控
在串口RS232标准中,有流控模式
什么是流控?
避免发送方以太快的速度把数据丢给接收方,导致接收方来不及处理而发生丢帧。常见的流控方式分成两大类:
软件流控(XON/XOFF)
硬件流控(CTS/RTS,也就是RS-232 硬件流控)
为什么需要流控?
有流控的时候:接收方可以“告诉”发送方:“我准备好了,你再发”;或者“我快满了,先别发”,这样就不会出现“来不及读”而卡死或丢帧的情况。
以后用到流控时再仔细学习吧
二,Configuration
参数配置(Parameter Settings)
先介绍Parameter Settings选项
1,Basic Parameters
下面框中的分别是波特率,Word Length(包含数据位数 + 校验位位数),校验位位数,停止位位数
波特率 (Baud Rate):设置数据传输的速率,单位是比特每秒 (bps)。通信双方必须设置相同的波特率。
配置提示: 115200 是非常常用的波特率。选择时需考虑通信距离、线缆质量和对端设备能力。CubeMX 会根据APB时钟和选择的波特率计算分频值,并提示误差率。
数据位 (Word Length):
定义每个数据帧中包含的数据位数。
7 bits (+ Parity)
8 bits (+/- Parity)
9 bits (+/- Parity)
配置提示: 最常用的是 8 bits。选择 7 bits 通常用于 ASCII 传输。选择 9 bits 可用于多机通信地址帧或特定协议。注意 Word Length 包含 Parity 位(如果启用)。
停止位 (Stop Bits):
用于标记数据帧的结束。
配置提示: 标准异步通信通常使用 1 个停止位。2 个停止位提供更长的帧间隔,可能用于较慢或噪声较大的环境。其他选项用于 Smartcard 等特殊模式。
校验位 (Parity):
用于简单的数据错误检测。
None (无校验)
Even (偶校验)
Odd (奇校验)
配置提示: None (无校验) 最为常用。如果需要简单的错误检测,可以选择偶校验或奇校验,通信双方必须一致。注意启用校验位会占用 Word Length 中的一位。
2,Advanced Parameters
1,Data Direvtion:数据传输方向
决定串口既可以发又可以接收,仅仅接收,仅仅发送
2,过采样 (Over Sampling)
什么是过采样?
我们先回顾一下前面的波特率:如果波特率是115200,就表示1秒传输115200bit数据,就是1/115200s传输1个bit数据,每次只在每bit中间时刻采样一次,这是在标准波特率下
如果在16X过采样模式下,我们还是选择115200波特率,数据传输速度不变,但是,不是只采样1 次,而是16次以提高抗噪声能力和波特率精度
实际上我们仅用其中3次关键采样点:
第3、5、7次采样:用于确认起始位的下降沿(低电平)
其余采样:用于稳定性校验(防止噪声误触发)
配置提示: Over Sampling 16 是默认且常用的设置,提供较好的鲁棒性。在需要非常高的波特率(接近时钟频率极限)时,可以选择 Over Sampling 8,但这会降低抗噪声能力。
Advanced Parameters的应用:
接收传感器数据,并发送至上位机:Data Direction = Receive & Transmit
提高ADC精度:Over Sampling = 16x
更高的数据传输率 :降低过采样(8x),启用DMA
更高的抗干扰能力 :保持16x过采样,增加硬件滤波
低功耗模式 :减少过采样次数,使用硬件加速
问题 | 可能原因 | 解决方案 |
---|---|---|
数据错误率高 | 过采样不足 | 提高至16x或32x |
通信丢包 | 未启用流控 | 检查RTS/CTS或降低波特率 |
ADC读数不稳定 | 电源噪声 | 增加去耦电容 |