没志青年
发布于 2025-07-23 / 23 阅读
0

32单片机 - 串口

在数据手册中:串口的功能

X 表示支持,- 表示不支持。

485 流控支持

中断类型

是否需要清除标志

如何清除

RXNE(接收非空)

❌ 不需要

读 DR 自动清

IDLE(空闲线)

✅ 需要手动清

先读 SR,再读 DR

串口作为SPI主机

当硬件 SPI 不够用的时候,可使用串口作为 SPI 主机,缺点是速度比较慢、不完全兼容 SPI 的所有模式和时序,适合低速SPI设备,如EEPROM。

外设中断和DMA中断到底用哪个?

在数据传输中,如果外设能明确分辨数据边界,即能知道数据的开始和结束,就用外设的中断,否则用DMA中断。

串口有不定长数据结束判断的能力,而 SPI 没有。

串口接收 +DMA

空闲中断

串口能判断数据接收完成了,因此不使用DMA中断

串口发送 + DMA

SPI 收发 + DMA

DMA 中断

ADC + DMA

ADC 中断

STM32中,为什么串口+DMA使用的是串口的空闲中断,而SPI+DMA使用的是DMA中断

RXNE:接收缓冲非空,表示接收到了数据

TXE:发送缓冲空,表示可以发送下一个数据了

TC:所有数据发送完

F0:

  • 清 RXNE 中断:

    • 读取 RDR 寄存器,常用

    • 向 USART_RQR 寄存器的 RXFRQ 位写 1

  • 清 TC 中断:先读取状态寄存器 USART_SR,再向 USART_TDR 寄存器写入数据

  • 清 TXE 中断:

    • 向 USART_TDR 寄存器写入数据

    • 向 USART_RQR 寄存器的 TXFRQ 位写 1

读取状态寄存器的方法

  • temp = USART1 -> ISR

  • USART_GetITStatus(USART1, USART_IT_RXNE)

USART_ClearITPendingBit 不能清 RXNE、TXE标志

串口使用DMA发送时,不需要管TXE中断标志,这些由DMA控制器自动清零。

当一次DMA就能传输完所有数据时,不用管TC,否则需要TC等待。