当前位置: 首页 > ds >正文

STM32F103 “BluePill” 上的 DMA 原理与实践

摘要:本文深入浅出地介绍什么是 DMA(直接存储器访问),它的核心原理、硬件架构,以及在 STM32F103(BluePill)上常见的几种使用场景(ADC、UART、内存拷贝等)。通过对比 CPU 轮询、中断、DMA 三种方式的数据搬运效率,结合寄存器级和 HAL 库示例代码,并附带性能测试与优化建议,帮助你在实际项目中高效地利用 DMA 降低 CPU 占用、提高实时性。


目录

  1. 引言

  2. DMA 基础概念

  3. STM32F1 系列的 DMA 控制器架构

  4. DMA 工作流程详解

  5. DMA 常见模式

  6. DMA 与 UART 串口通信

  7. DMA 与 ADC 数据采集

  8. 内存到内存拷贝:DMA 也能做 memcpy

  9. 在 BluePill 上使用寄存器级配置 DMA

  10. 用 STM32CubeMX 和 HAL 库更省心地用 DMA

  11. 性能对比与注意事项

  12. 优化建议

  13. 总结与展望

  14. 参考文献


1. 引言

在嵌入式系统中,外设与内存之间经常需要搬运大量数据——比如 ADC 连续采样、UART 收发大块报文、DMA 做内存拷贝等。如果全部依赖 CPU 轮询或中断,会带来:

  • CPU 占用高:处理每个字节都要打断或忙等。

  • 实时性差:大量中断可能导致其他关键任务丢帧。

  • 效率低下:总线利用率不佳。

STM32 家族片上集成的 DMA 控制器,可在不干扰 CPU 的情况下直接在内存和外设间搬运数据。正确使用 DMA,能将数据搬运任务交给专用硬件,CPU 只需“下达命令、收尾处理”,极大提高系统整体效率。本篇文章围绕 STM32F103(也就是常见的 “BluePill”)展开,既有底层原理,又有寄存器级、HAL 库两套实战示例,帮助你快速上手。


2. DMA 基础概念

  • DMA 控制器:片上独立模块,具有多个“通道”(Channel)或“流”(Stream)用于管理不同搬运任务。

  • 通道 Channel:用户配置源地址、目标地址、数据长度、传输方向、地址自增模式、中断使能等。每个通道相当于一条搬运“管道”。

  • DMA 请求:外设(如 UART、ADC、SPI)在准备好数据或空闲可写时,会给出硬件信号,触发 DMA 从源到目标的一次搬运。

  • 总线主控权(Bus Master):DMA 控制器可暂时接管系统总线,直接访问内存和外设寄存器,无需 CPU 干预。

优势

  • 零 CPU 干预&#

http://www.xdnf.cn/news/1493.html

相关文章:

  • 「ES数据迁移可视化工具(Python实现)」支持7.x索引数据互传
  • unity游戏开发之 拖放教程2D
  • 代理ip池有哪些类型?代理IP池的定义、特点与使用场景
  • leetcode0099. 恢复二叉搜索树- medium
  • 在基于Transformer的LLM中,将越重要的提示词前置,对生成效果越好吗
  • LeetCode算法题(Go语言实现)_58
  • 122.在 Vue3 中使用 OpenLayers 实现图层层级控制(zIndex)显示与设置详解
  • CIFAR-10图像分类学习笔记(一)
  • vim的.vimrc配置
  • 【Java面试笔记:基础】11.Java提供了哪些IO方式? NIO如何实现多路复用?
  • 哪些心电图表现无缘事业编体检呢?
  • Linux程序地址空间
  • 【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性
  • 《Cesium 中两点绘制线的实现:实线、虚线、动态线、流动线详解》
  • 元素滚动和内容垂直居中同时存在,完美的 html 元素垂直居中的方法flex + margin: auto
  • Java 中 String 转 Integer 的方法与底层原理详解
  • Elasticsearch(ES)中的脚本(Script)
  • 设备沟通不再“鸡同鸭讲”EtherCAT转Profinet网关助力工业互联新升级!
  • SpringMVC从入门到上手-全面讲解SpringMVC的使用.
  • BUUCTF jarvisoj_test_your_memory
  • 电控---DMP库
  • C语言(1)—C语言常见概念
  • xcode 16 遇到contains bitcode
  • visio导出的图片过大导致latex格式转成pdf之后很不清楚
  • 缩放点积注意力
  • 新书速览|Hadoop与Spark大数据全景解析(视频教学版)
  • STM32F4 W25Q64存储芯片详解:特性以及应用
  • Java 集合:泛型、Set 集合及其实现类详解
  • 房屋租赁管理系统
  • 具身智能操作知识梳理与拓展