A---DMA串口通信
Posted haichuangdianzi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A---DMA串口通信相关的知识,希望对你有一定的参考价值。
1、芯片:STM32L031F6
2.、实现DMA串口数据发送和接收
cubeMX配置:
1、芯片选择
2、根据图中三个红框进行配置,本次实验中使用的USART2。根据硬件设计,电脑与单片机是通过USART2通信,因为UART1以后也会用到,目前先做简单设置。
3、UART1设置。
4、UART2设置。
由于使用DMA,所以也要进行DMA相关配置。
5、NVIC配置
5、时钟配置
MDK设置
1、在usart.c文件中添加如下代码
/* USER CODE BEGIN 0 */
uint8_t Rx_Flag = 0;
uint16_t Rx_Len = 0;
uint8_t Rx_Buf[1024] = {0};
/* USER CODE END 0 */
2、在usart.h文件中添加如下代码
#define Rx_Max 1024
extern uint8_t Rx_Flag;
extern uint16_t Rx_Len;
extern uint8_t Rx_Buf[1024];
3、在stm32f1xx_it.c文件中添加如下代码
#include "usart.h"
if((__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE) != RESET))
{
/*清除状态寄存器和串口数据寄存器*/
__HAL_UART_CLEAR_IDLEFLAG(&huart2);
/*失能DMA接收*/
HAL_UART_DMAStop(&huart2);
/*读取接收长度,总大小-剩余大小*/
temp = huart2.hdmarx->Instance->CNDTR;
Rx_Len = Rx_Max - temp;
/*接收标志位置1*/
Rx_Flag=1;
/*使能接收DMA接收*/
HAL_UART_Receive_DMA(&huart2,Rx_Buf,Rx_Max);
}
4、在main.c文件中添加如下代码
HAL_UART_Receive_DMA(&huart2, Rx_Buf, Rx_Max);
__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
if(Rx_Flag) // Receive flag
{
Rx_Flag=0; // clean flag
HAL_UART_Transmit_DMA(&huart2, Rx_Buf, Rx_Len);
}
以上是关于A---DMA串口通信的主要内容,如果未能解决你的问题,请参考以下文章