uart(串口)

← 返回 MOC | ← 主页

下载串口驱动


知识要点

UART是异步⭐的,就是没有时钟线,一个TX,一个RX,一个GND

硬件流控(RTS/CTS) :接收缓冲区快满时通过CTS让对方暂停发送,防止数据丢失。这两个算可选

UART接收时,硬件依靠波特率时钟将引脚上的跳变一位一位送到移位寄存器中,满8位后再放到接收数据寄存器中,此时 RXNE(接收寄存器非空)标志位置为 1,触发接收中断。

协议线数速率特点
UART2线(TX/RX)几百Kbps异步、点对点、全双工、简单调试串口、蓝牙/GPS模组
I2C2线(SDA/SCL)100K/400K/3.4Mbps同步、半双工、多从机、带寻址传感器、EEPROM、RTC
SPI4线几十Mbps同步、全双工、速度快、无寻址Flash、LCD、ADC ,屏幕等高速外设
CAN2线(差分)1Mbps多主多从、差分抗干扰、带仲裁、汽车工业常用汽车和工业总线

选型原则:低速简单用 UART,多设备低速用 I2C,高速短距离用 SPI,长距离抗干扰用 CAN。

波特率自适应 方法:

  • 发送方先发特定字符(如 0x7F),接收方测量脉冲宽度自动计算波特率
  • STM32支持硬件自动波特率检测:利用起始位下降沿到特定边沿的时间推算

波特率计算:

波特率 = 时钟频率 / (分频系数 × 过采样倍数)

以STM32为例:

  • USART挂在APB总线上(假设APB时钟=84MHz)
  • 过采样16倍:BRR = APB_CLK / (16 × BaudRate)
  • 如115200波特率:BRR = 84000000 / (16 × 115200) = 45.57
  • 取整为45,实际波特率 = 84000000 / (16×45) = 116667
  • 误差 = (116667-115200)/115200 ≈ 1.27%(在±3%以内,可用)

关键:误差不超过±3%,否则会出现乱码。高波特率时误差更容易超标。

使用的3种电平的区别:

RS485,RS232,TTL

USART:

这里的s意思是sunchronous,增加了同步的功能


UART接收程序

UART发送程序