今天花了10分钟简单看了下STM32的DMA
DMA
|
|
DMA在我脑海里,一直是一个很神奇的东西,自己也“不敢用”(不会用)(0.0)
说实话对于STM32我是一个初学者,学习它还没多久,几乎没几个月,到了公司才开始学32,但是不得不说没在公司里真的是学的非常快,因为有项目在一步一步的推进所以自己也跟着学了很多东西。今天再次打开DMA,感觉不像以前那样一头雾水了,感觉茅塞顿开!恍然大悟的感觉。今天来总结一下这一会儿我看的东西。
其实,咱们平时用的最多的是:
存储器和存储器间的传输
外设和存储器、存储器和外设之间的传输
通道配置过程
下面是配置DMA通道x的过程(x代表通道号):
- 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将
是数据传输的源或目标。 - 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数
据将从这个地址读出或写入这个地址。 - 在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
- 在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
- 在DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外
设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。 - 设置DMA_CCRx寄存器的ENABLE位,启动该通道。
一旦启动了DMA通道,它既可响应连到该通道上的外设的DMA请求。
当传输一半的数据后,半传输标志(HTIF)被置1,当设置了允许半传输中断位(HTIE)时,将产生
一个中断请求。在数据传输结束后,传输完成标志(TCIF)被置1,当设置了允许传输完成中断位
(TCIE)时,将产生一个中断请求。
首先要先看文档手册就是STM32的手册,可知
- ADC_DMA 属于通道1
- USART1_TX_DMA 属于通道4
今天主要用到DMA的ADC采样与串口1的DMA发送。
ADC_DMA 配置如下:
|
|
|
|
USART1_TX_DMA 配置如下:
|
|
|
|