本文内容:本文主要介绍如何用STM32CUBEMX创建DMA通信例程。
一、DMA介绍
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
DMA框图
二、创建DMA例程
创建工程,选择芯片型号
设置RCC,选择Cystal
设置串口
1点击USATR1
2设置MODE为异步通信(Asynchronous)
3基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1 接收和发送都使能
4GPIO引脚自动设置 USART1_RX/USART_TX
使能中断
DMA设置
点击DMASettings 下的 Add 添加通道,传输速率设置为中速
模式设置为Normal,右侧选择Memory
在System view下选择DMA
左侧点击ADD的添加
进行时钟设置
设置工程名和IDE的版本
点击右上角GENERATE CODE,完成
三、代码改写及运行效果
在下图位置添加代码
uint8_t Senbuff[] = "Hello world!"; //定义数据发送数组
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
HAL_Delay(1000);
编译,没错
烧录
打开上位机,按下一次按键,发送一次Hello world!
四、总结
本次实验主要用了DMA的方式进行通信,相比普通的串口通信,这种数据传输不经过CPU,是个更高效的方式。
五、参考文章
https://blog.csdn.net/as480133937/article/details/104827639/
文章评论