STM32之DMA通信

本文内容:本文主要介绍如何用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/

猜你喜欢

转载自blog.csdn.net/m0_58414679/article/details/121060921