一、DMA的认识
DMA(直接存储器访问):用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。
1.1 DMA传输四要素
1、传输源:DMA数据传输的来源
2、传输目标:DMA数据传输的目的
3、传输数量:DMA传输数据的数量
4、触发信号:启动一次DMA数据传输的动作
1.2 DMA框图
1.3 DMA数据传输方式
普通模式:传输结束后,不再产生DMA操作。若开始新的DMA传输,需在关闭DMA通道情况下,重新启动DMA传输。
循环模式:用于处理环形缓冲区和连续数据流。当激活循环模式后,每轮传输结束时,要传输的数据数量将自动用设置的初始值进行加载,并继续响应DMA请求。
二、用DMA实现数据传输
- 创建项目工程,选择芯片型号
- 选择RCC->HSE->Crystal
- 设置串口
1、点击USATR1
2、设置MODE为异步通信(Asynchronous)
3、基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
4、GPIO引脚自动设置 USART1_RX/USART_TX
- 使能中断
- DMA设置
点击DMASettings 下的 Add 添加通道,传输速率设置为中速
- 模式设置为Normal,右侧选择Memory
- 在System view下选择DMA,左侧点击ADD添加
- 进行时钟设置
- 设置工程名和IDE版本
- generate code即可完成
三、添加代码运行
在下图位置添加代码:
uint8_t send_char[]="hello world\n";//发送的字符串
HAL_UART_Transmit_DMA(&huart1,(uint8_t *)send_char,0xc);//DMA发送
HAL_Delay(500);//延时
编译无误:
烧录:
boot0接0,打开SSCOM串口助手,打开串口即可接收。
四、总结
DMA传输过程不占用CPUu,更快更高效更加节约资源。
五、参考资料
https://blog.csdn.net/as480133937/article/details/104827639/