前言
STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据。
一、DMA介绍
DMA,全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
DMA框图
二、创建CubeMX项目生成代码
选择芯片
设置RCC,选择Cystal
设置串口
使能中断
DMA设置
点击DMA Settings的Add添加通道,传输速率设置为中速Medium,模式设置为Normal,右侧选择Memory
在System view下选择DMA
时钟设置如图所示
之后生成项目即可
三、代码补充
在main.c
中添加代码
uint8_t Senbuff[] = "Hello world!"; //定义数据发送数组
添加代码在while循环里:
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
HAL_Delay(1000);
编译无误,生成HEX文件
四、串口发送数据
将芯片BOOT0置1,烧录程序
然后打开串口助手,将BOOT0置0,按下复位键,即可接收数据
五、总结
通过本实验,可能不能直观的看出查询方式和DMA方式的区别,因为是潜在的速度区别和功能区别,DMA传输过程不占用CPU资源,可以边传输边运行其他任务,更加高效。