1. DMA基础概念与实际应用价值
如果你正在使用STM32做项目,肯定遇到过这样的问题:CPU忙着处理数据搬运的时候,其他重要任务就被耽误了。这时候DMA(直接存储器访问)就像请了个专职搬运工,帮你把数据从一个地方搬到另一个地方,完全不需要CPU插手。
我刚开始用STM32的时候,总是搞不清楚DMA的两种模式到底该怎么选。后来在几个实际项目中踩了不少坑,才慢慢摸清了门道。简单来说,正常模式就像是一次性送货服务,送完就结束;而循环模式则是循环送货,源源不断地提供数据。
DMA最大的优势就是解放CPU。比如在做音频处理时,需要持续不断地输出音频数据,如果让CPU来搬运这些数据,其他任务根本没法正常运行。用了DMA之后,CPU只需要初始化配置,剩下的搬运工作就全交给DMA了,系统效率瞬间提升好几个等级。
2. CubeMX中DMA配置详解
2.1 基本配置步骤
打开CubeMX,找到DMA配置界面,这里有很多参数需要设置。我先说几个最容易搞错的点:
首先是通道选择,每个外设都有固定的DMA通道,这个不能乱选。比如USART1_TX对应的是DMA1的Channel4,如果你选错了,数据根本传不出去。我在早期项目中就犯过这个错误,调试了半天才发现是通道选错了。
数据传输方向也很关键。是从内存到外设(比如串口发送),还是从外设到内存(比如ADC采集),或者是内存到内存。方向选反了,数据就跑到不知道哪里去了。
优先级设置很多人会忽略。当多个DMA通道同时工作时,优先级高的会先被处理。如果你的实时数据不能耽误,记得把它的优先级设高一些。
2.2 关键参数解析
数据宽度是个容易出问题的地方。外设和内存的数据宽度要匹配,比如串口数据寄存器是8位的,如果你设置成32位,就会一次发送4个字节,很可能不是你想要的结果。
地址递增模式也需要特别注意。外设地址通常不需要递增,因为数据寄存器就一个固定地址。但内存地址一般要递增,这样才能连续存取数据。
我建议在配置完成后,一定要双击检查每个参数。有时候手滑点错了,后面调试起来特别麻烦。


7713

被折叠的 条评论
为什么被折叠?



