一、配置STM32cubeMX工程
这里我们以串口为例子,在cubemx中使用DMA的操作相比寄存器和库函数的方式要简单很多。
在配置好时钟和基本配置以后进行以下操作
DMA Request :DMA请求的对象(外设)
Channel :DMA请求的通道,每一个外设的DMA都有特定的通道我们无法自行设置。不同的通道对应的外设如下
Direction :数据的传输方向,传输方式有从内存到外设,从内存到内存,外设到内存。
Priority :传输速率
二、DMA的技术讲解
从图中可以看到DMA主要由两个部分组成,仲裁器和通道,而仲裁器的作用其实就是判断谁能先执行,这个由它的优先级决定的。DMA则是直接挂载在总线矩阵上面的。
三、HAL库函数的调用
HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
//参数 :外设对象、发送的数据、数据长度
对于串口而言他还有一个接收函数,这里我做过多介绍,接收的也带有DMA字样。而对于其他外设而言操作都是类似的。
四、HAL库实现控制DMA相关寄存器的方法(后续更新)