ARM学习《十一》—不用库函数自己动手配置STM32中的DMA
DMA英文全称是Direct Memory Access,意思是直接存储器访问。他的作用就是不需要经过CUP进行数据传输,也就是替CPU分担点事情做,什么事情?数据传输方面的事情。也就是说,你只要使能并配置好了DMA,DMA就可以将一批数据从源地址搬运到目的地址去而不经过CPU的干预,这样可以为CPU节省好多精力去干更重要的事情很人性化。就像我们人一样,我们平常习惯性的动作是不用经过大脑思考的,比如说眨眼睛,呼吸等。DMA就是负责这些工作的,但它没人这么智能,需要将它设置好了它才会正常工作。
要进行数据传输就必须有两个条件:数据从哪传(源地址),数据传到哪里去(目的地址)。是的DMA的确有这两项设置,通过软件设置,设置好源地址和目的地址。在一个重要的条件就是触发源是什么,就是说什么时候进行DMA数据传输呢?这叫触发信号。也可以通过软件编程设置具体时间,具体条件来触发DMA数据传输。
总之,要使用DMA就要将各种参数,条件配置好才可以用。就提的DMA寄存器说明见STM32的参考手册。下面举一简单的历程来说明DMA的用法,本历程将串口数据发送设置为DMA模式,串口1将持续从RAM中的一段连续的地址中取数据,然后发送出去。用串口调试助手可以监测DMA的工作和CPU互不冲突,串口发送就相当于后台运行的一段程序。具体配置如下:
寄存器定义:
//*************************************************************************
//
// DMA-Register
//
//*************************************************************************
#define DMA_ISR
#define DMA_IFCR
#define DMA_CCR1
#define DMA_CCR2
#define DMA_CCR3
#define DMA_CCR4
#define DMA_CCR5
#define DMA_CCR6
#define DMA_CCR7
#define DMA_CNDTR1
#define DMA_CNDTR2
#define DMA_CNDTR3
#define DMA_CNDTR4
#define DMA_CNDTR5
#define DMA_CNDTR6
#define DMA_CNDTR7
#define DMA_CPAR1
#define DMA_CPAR2
#define DMA_CPAR3
#define DMA_CPAR4
#define DMA_CPAR5
#define DMA_CPAR6
#define DMA_CPAR7
#define DMA_CMAR1
#define DMA_CMAR2
#define DMA_CMAR3
#define DMA_CMAR4
#define DMA_CMAR5
ARM学习库函数STM32DM 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)