STM32 USART串口怎么配置?波特率怎么算?DMA收发怎么用?嵌入式面试

浏览量:27
时间: 2026-10-06 11:51:35
一句话答案

USART 配置:GPIO 复用(TX/RX)→波特率设置(BRR 寄存器)→数据位/停止位/校验→使能;波特率 = fCK / (16×USARTDIV), oversampling 16;DMA 收发减轻 CPU 负担,TX 用 DMA 内存→外设,RX 用 DMA 外设→内存,配合 IDLE 中断判断帧结束。

本文概述

串口是单片机最常用通信,面试常考:波特率计算、DMA 收发、IDLE 中断、收发流程。回答要给配置步骤和波特率公式。

核心要点

  • USART 配置:GPIO 复用→波特率→数据格式→使能 TX/RX

  • 波特率 = fCK / (16 × USARTDIV),USARTDIV 写入 BRR 寄存器

  • DMA TX:内存→外设,发送完成中断;DMA RX:外设→内存,循环模式+IDLE 中断

  • IDLE 中断:总线空闲时触发,用来判断一帧数据接收完成

  • 常用参数:115200 8N1(8 数据位、无校验、1 停止位)

STM32 开发板和 USB 转串口模块,串口通信,示波器测量 TX 波形

面试官:STM32 72MHz,USART1 要 115200 波特率,BRR 寄存器写多少?

面试官考察点

串口基础题。面试官看你是否会算波特率。重点听:公式、USARTDIV、BRR。

回答思路

用公式算 USARTDIV,再转 BRR。

参考回答

波特率公式(oversampling=16)。

波特率 = fCK / (16 × USARTDIV)
USARTDIV = fCK / (16 × 波特率)

72MHz,115200:

USARTDIV = 72000000 / (16 × 115200)
        = 72000000 / 1843200
        = 39.0625

BRR 寄存器格式:整数部分左移 4 位 + 小数部分×16:

整数 = 39,小数 = 0.0625 × 16 = 1
BRR = (39 << 4) | 1 = 0x271

HAL 库用 HAL_UART_Init 自动算,直接设 BaudRate=115200 即可。

配置步骤(HAL)。

  1. 使能 USART 和 GPIO 时钟;

  2. GPIO 配置为复用推挽(AF7 为 USART1);

  3. UART_HandleTypeDef 配置:BaudRate、WordLength(8位)、StopBits(1)、Parity(无)、Mode(TX_RX);

  4. HAL_UART_Init;

  5. 发送:HAL_UART_Transmit(阻塞)或 HAL_UART_Transmit_DMA(DMA);

  6. 接收:HAL_UART_Receive(阻塞)或 HAL_UART_Receive_DMA(DMA)。

接收方式对比。

方式CPU 占用丢数据风险适用
阻塞接收高(等数据)高简单调试
中断接收中中低速少量数据
DMA+IDLE低低高速不定长(推荐)

DMA 接收 + IDLE 中断(不定长数据)。

  • 配置 DMA 循环模式,接收缓冲区固定大小(如 256 字节);

  • 使能 USART IDLE 中断(总线空闲时触发);

  • IDLE 中断里:读 SR 清 IDLE 标志,计算已接收长度 = 缓冲区大小 - DMA 剩余计数;

  • 处理数据,然后重新启动 DMA 接收;

  • 优点:不占用 CPU,适合不定长协议(如 Modbus、AT 指令)。

注意。

  • 波特率误差要 <2%,否则通信出错。72MHz/115200 误差 0.16%,没问题;

  • TX/RX 要交叉连接(A 的 TX 接 B 的 RX);

  • RS232 电平(±12V)要加 MAX232 转换,TTL 电平(3.3V)直接连;

  • 接收引脚要加下拉或上拉,防止空闲时噪声误触发。

面试官可能追问

追问 1:USART 和 UART 区别?
USART 支持同步时钟(SCLK 引脚),UART 只有异步。一般用异步模式,两者通用。
追问 2:DMA 接收怎么知道一帧结束?
用 IDLE 中断(总线空闲超过一帧时间),或用定时器超时(3.5 字符时间,Modbus 用)。
追问 3:波特率误差怎么算?
实际波特率 = fCK/(16×USARTDIV取整),误差 = |实际-理想|/理想。一般 <2% 可通信。
追问 4:为什么用 DMA 发送?
阻塞发送 HAL_UART_Transmit 会等发送完成,CPU 被占用。DMA 发送由硬件搬移数据,CPU 可以做别的,发送完触发中断。
追问 5:串口接收丢数据怎么办?
用 DMA+IDLE,或中断接收+环形缓冲区。阻塞接收会丢数据(前一字节没读完下一字节来了)。

常见失分表达

✗ 阻塞发送接收 — CPU 占用高,接收丢数据。
✗ TX/RX 不交叉 — 发接发、收接收,通信失败。
✗ 不考虑波特率误差 — 误差大时通信乱码。

准备动作

1
算一次波特率 BRR
2
用过 DMA+IDLE 接收不定长数据
3
准备一个串口乱码最终定位是波特率不对的案例

核心关键词

STM32USART串口波特率BRRDMAIDLE中断115200


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。侵权投诉
相关推荐HOT
PCB测试点应该怎么设计?面试别只回答“方便测量”

分类:PCB设计 | 适合人群:0-3年、3-5年 | 难度:中级 | 题型:场景与项目追问题面试题你在PCB项目中会怎样规划测试点?哪些网络必须保留测试访问?... 详情>>

2026-07-28 15:41:42
LDO噪声怎么抑制?PSRR怎么看?RF/ADC供电为什么用LDO?电源面试

一句话答案LDO 噪声靠 PSRR(电源抑制比)和输出噪声指标衡量:PSRR 随频率升高下降,低频靠 LDO、高频靠电容;RF/ADC 模拟供电用 LDO 是因... 详情>>

2026-09-18 09:05:01
正激Forward电源怎么设计?变压器复位怎么做?占空比为什么限制50%?电源面试

一句话答案正激电源变压器只传能量不储能(原副边同时导通),需要复位绕组或有源钳位复位变压器磁通;占空比一般限制 <50%(双管正激)或 <70%(有源钳位),防... 详情>>

2026-10-06 11:52:46
电话面试常见的8个错误

如你想要赢得接下来的面试机会,并表现卓越才能赢得Offer,那么你在电话面试中就要避免以下8个常见错误。1、想着这不是一个真正的面试。 有些求职者把电... 详情>>

2023-09-09 16:37:29
Boost电源输出二极管为什么有反向恢复尖峰?电源工程师面试题

📂 分类:电源设计📊 经验级别:中级⭐ 难度:★★★☆☆📝 题型:电源拓扑题本文概述Boost电路中输出二极管的反向恢复尖峰是开关电源里的经典问题,根本原... 详情>>

2026-08-10 11:36:48
开班信息