查看: 21|回复: 0

单片机拷数据为什么不再靠CPU搬砖?聊聊DMA

[复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式
⏱单片机要连续采集 8 路传感器数据,如果全靠 CPU 一个字节一个字节搬,主循环还得同时跑 PID、刷屏幕——很快你就发现,代码"变慢"了。这时候该请 DMA 出场。
🧠 DMA 到底是什么
DMA(Direct Memory Access,直接内存访问)是独立于 CPU 的搬运工外设:你告诉它源地址、目标地址和长度,它就在总线上自己搬数据,搬完发个中断通知你。CPU 全程只需"下指令"和"收货"。
📦 常见玩法
  • ✔ ADC 多通道扫描 + DMA 循环模式:采样结果自动落缓冲区,CPU 零参与
  • ✔ UART 不定长接收:空闲中断配 DMA,一帧到了才惊动 CPU
  • ✔ SPI 刷屏:整帧数据 DMA 推送,主循环不卡顿
  • ✔ 内存到内存搬运:配合定时器触发,做精确时序输出

⚠️ 坑也不少
  • ❌ 缓冲区放在总线不互通的内存(如某些 CCM RAM),DMA 根本摸不到
  • ❌ 带 Cache 的芯片(如 H7 系列)忘做 invalidate,读到旧数据
  • ❌ 传输过程中改源数据,没人帮你同步
  • 🔒 多路 DMA 抢总线时,优先级要提前规划



一句话:DMA 让 CPU 从"搬运工"升格为"调度员",算力省下来干正事。

互动一下:你项目里最该上 DMA 却还在让 CPU 搬砖的环节是哪个?评论区交流 💬
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号
免责声明|Archiver|手机版|小黑屋|半导贴吧

相关侵权、举报、投诉及建议等,请发 E-mail:1152577621@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|渝ICP备2024033348号|渝ICP备2024033348号-1

在本版发帖
关注公众号
QQ客服返回顶部