[STM32F1] STM32F1 串口 DMA 收发与 printf 重定向配置实战

[复制链接]
230|40
jkl21 发表于 2026-10-15 12:11 | 显示全部楼层
重定向到串口,底层用DMA发送或阻塞发送。
光影捕手 发表于 2026-10-15 12:41 | 显示全部楼层
DMA发送时,检查USART_FLAG_TC标志确认发送完成,避免数据覆盖。
pentruman 发表于 2026-10-15 18:14 | 显示全部楼层
多串口DMA配置冲突解决方法?              
wengh2016 发表于 2026-10-15 19:05 | 显示全部楼层
接收缓冲区溢出如何处理?              
louliana 发表于 2026-10-15 20:44 | 显示全部楼层
DMA 普通模式 + 发送环形缓冲区 + TX 完成回调续传,避免阻塞调用方。
MessageRing 发表于 2026-10-16 12:50 | 显示全部楼层
串口配置确实要小心波特率和通道映射,我用DMA发数据时也是用空闲标志来保证上一次传输完成。
abotomson 发表于 2026-10-17 08:43 | 显示全部楼层
vsnprintf 格式化到本地缓冲
ulystronglll 发表于 2026-10-17 11:07 | 显示全部楼层
配置DMA为循环模式,持续接收数据至缓冲区,通过UART IDLE中断或DMA传输完成中断判断数据帧结束。
eefas 发表于 2026-10-17 14:55 | 显示全部楼层
DMA通道外设请求是‌硬件固定映射‌,不能像F4那样通过重映射灵活配置,选错通道DMA***不工作,这是新手第一坑。
cashrwood 发表于 2026-10-17 18:45 | 显示全部楼层
重定向的fputc中,通过等待USART_FLAG_TC确保数据发送完毕,但高频率调用时可能阻塞,可改用DMA发送+中断完成回调,减少单片机占用
backlugin 发表于 2026-10-17 20:22 | 显示全部楼层
UART和DMA中断优先级高于其他非关键中断,避免数据丢失
plsbackup 发表于 2026-10-17 22:13 | 显示全部楼层
DMA通道匹配错误如何排查?              
亚瑟 发表于 2026-10-18 13:43 | 显示全部楼层
发送前检查USART_FLAG_TC标志,确认发送完成再启动DMA,防止覆盖。
mollylawrence 发表于 2026-10-18 18:18 | 显示全部楼层
用的 USART1/2/3 哪个
kmzuaz 发表于 2026-10-19 08:41 | 显示全部楼层
用DMA搬运待发送内存到USART->DR,发送完成中断触发后释放缓冲区。
闪烁阴影 发表于 2026-10-19 15:38 | 显示全部楼层
DMA发送前检查DMA状态,确保上次传输完成,防止数据覆盖。
jimmhu 发表于 2026-10-19 16:15 | 显示全部楼层
通过修改stdio.h的_write函数或直接重写printf的输出函数,将标准输出指向串口发送接口。
lzmm 发表于 2026-10-19 18:34 | 显示全部楼层
HAL 还是标准库/寄存器              
pmp 发表于 2026-10-20 17:14 | 显示全部楼层
DMA 中断优先级高于 UART 中断,确保续传及时。
Undshing 发表于 2026-10-20 18:05 | 显示全部楼层
串口DMA发printf,记得在fputc中检查DMA传输完成标志,防止数据覆盖。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部