1. 苦力 DMA
世上本没有路,走的人多了,便成了路。世上本没有 DMA,需要搬运的数据多了,便有了 DMA。
大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中也不存在DMA模块。再加上很多谈 DMA 的文章,一上来就先来一个总线架构图,然后来一大堆让人生畏的词儿:共享总线,仲裁器,指针增量,对齐,中断 ... 好吧,每一个词都能吓跑一批胆小的。
真的需要这么复杂吗?就好比我们学开车一样,能不能先别去尝试弄懂发动机的原理,直接挂档踩油门走起来呢?
DMA是很简单的一个模块,首先他的功能单一,就是把数据从一个地方搬运到另一个地方,再一个它的用法也很简单,我们还是先从一个例子说起:
我们用 Keil 打开下面这个工程:
STM32Cube_FW_F0_V1.11.0ProjectsSTM32F030R8-NucleoExamplesDMADMA_FLASHToRAMMDK-ARMProject.uvprojx
![c94cf01b016a1b80e084f609cea13113.png](https://i-blog.csdnimg.cn/blog_migrate/8aa12a2af2852ae431201b2c9d4e56c6.jpeg)
如图,有一些存储在 Flash 的数据需要搬运到 RAM 区的一个数组。通常我们可以用如下的代码实现:
for(i=0;i
aDST_Buffer[i] = aSR