【HMGD】GD32/STM32 DMA接收不定长串口数据

单片机型号:GD32F303系列

CubeMX配置

配置串口参数

在这里插入图片描述

开启DMA

在这里插入图片描述

开启中断

在这里插入图片描述

示例代码

使用到的变量

uint8_t RX_Buff_FLAG = 0;
uint8_t RX_Buff[300] = {0};
uint8_t TX_Buff[300] = {0};

串口接收空闲函数

// 串口接收空闲函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart == &huart2){
		
		RX_Buff_FLAG = 1;
		
		RX_Length = 300 - __HAL_DMA_GET_COUNTER(huart->hdmarx);
		HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RX_Buff, 300);
	}
}

主函数

HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
// 启动串口DMA接收
HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RX_Buff, 300);

while(1)
{
    // 等待接收
	if(RX_Buff_FLAG == 1)
	{
        RX_Buff_FLAG = 0;
        
        HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_SET);
        // 发送数据
        TX_Buff[0] = 0x01;
        TX_Buff[1] = 0x02;
        TX_Buff[2] = 0x03;
        HAL_UART_Transmit_DMA(&huart2, TX_Buff, 10);
    }
}

出现BUG

当使用115200进行通信没问题,然后切换到其他波特率发送数据后,在切换到115200进行通信就会无法接收数据

解决办法

void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart2){
		HAL_GPIO_WritePin(USART2_CTS_GPIO_Port, USART2_CTS_Pin, GPIO_PIN_RESET);
		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, TX_Buff, 300);
	}
}

相关推荐

  1. stm32_HAL_串口不定数据接收发送

    2024-05-11 11:12:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 11:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 11:12:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 11:12:01       82 阅读
  4. Python语言-面向对象

    2024-05-11 11:12:01       91 阅读

热门阅读

  1. 蓝桥杯备战4.双子数

    2024-05-11 11:12:01       26 阅读
  2. 程序员必须学会的道理,少走十年弯路!

    2024-05-11 11:12:01       29 阅读
  3. c#文心接口应用举例

    2024-05-11 11:12:01       35 阅读
  4. 从零开始学习MySQL 事务处理

    2024-05-11 11:12:01       25 阅读
  5. ubuntu 查看 postgresql 用户

    2024-05-11 11:12:01       32 阅读
  6. 商品购物车数据以店铺id为key,组合对应的数据

    2024-05-11 11:12:01       34 阅读
  7. 1、搭建TS开发环境(利用rollup)

    2024-05-11 11:12:01       37 阅读
  8. python dict赋值时有逗号自动变成元组

    2024-05-11 11:12:01       33 阅读
  9. 每天一个数据分析题(三百一十九)-图表

    2024-05-11 11:12:01       28 阅读
  10. 【前端每日一题】 day3

    2024-05-11 11:12:01       41 阅读
  11. 深度学习中超参数设置

    2024-05-11 11:12:01       34 阅读