使用STM32的DMA功能实现串口通信
目录
一、DMA工作原理
DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。
二、创建工程项目
选择芯片STM32F103C8T6:
配置RCC:
配置SYS:
配置时钟:
选择PLLCLK,然后将后面的晶振频率最大值改为72M赫兹
配置USART:
在DMA Setting中:
相关设置解释(发送和接收参数设置相同):
DMA设置:
项目设置:
打开项目:
三、编写代码
1.在main.c写入以下函数
/* USER CODE BEGIN Init */
uint8_t Senbuff[] = "hello Windows!\n"; //定义数据发送数组
/* USER CODE END Init */
2.main函数中的while循环中写入以下代码
/* USER CODE END WHILE */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)); //串口发送Senbuff数组
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
四、编译烧录
1.编译运行
/* USER CODE BEGIN Init */
uint8_t Senbuff[] = "hello Windows!\n"; //定义数据发送数组
/* USER CODE END Init */
/* USER CODE END WHILE */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)); //串口发送Senbuff数组
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
1.编译运行
2.烧录结果
五、总结
通过本次实验,我学会了用DMA方式实现串口通信,并了解了DMA的工作原理。DMA用于在外设与存储器之间以及存储器与存储器之 间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过 程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。
六、参考文献
STM32串口DMA方式连续发送数据_WOOZI9600L²的博客-CSDN博客