嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据--之2

在我之前 的文章 嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据 中,介绍过用DMA+IDLE中断来接收不定长数据,就是利用DMA来接收数据,当一帧传送完成后,总线上出现一个完整的空闲帧的时间长度后,STM32会将IDLE标志置位,并产生一个中断。响应这个中断就可以接收不定长度的一帧了。

现在介绍一个更简单的方法,工作逻辑是一样的,但是更简明些。

HAL_UARTEx_ReceiveToIdle_DMA()函数,其原型如下:

HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size),使用时需要使能串口中断,并开启IDLE中断

CubeMX中设置如下:

开启中断

设置DMA

然后就是软件

c 复制代码
  HAL_UARTEx_ReceiveToIdle_DMA(&huart3, uart3_rxbuf, UART3_RXBUF_LEN);
  __HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);	//开启IDLE中断

最后需要重写回调函数

c 复制代码
// 接收事件回调函数,Size是本次接收到的数据长度
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{    
  u16 i;
  //调试接口uart3收到数据
  if (huart->Instance == USART3) 
  {
    // 1. 停止DMA传输
    HAL_UART_DMAStop(huart);

    // 2. 清除接收缓冲区
    for(i=0; i<Size; i++)
    {
      uart3_rxdata[i] = uart3_rxbuf[i];   //从接收缓冲区提取数据
      uart3_rxbuf[i] = 0;		//这一行可以注释掉,留着它完全是为了调试时看得方便
    }
    // 3. 重新启动接收,DMA指针会自动归零,从头开始接收
    HAL_UARTEx_ReceiveToIdle_DMA(huart, uart3_rxbuf, UART3_RXBUF_LEN);
      
    uart3_rx_len = Size;                      //接收到的数据长度
  }
}

此时,在uart3_rxbuf\[\]中保存的是数据,uart3_rx_len 是长度。

最后在主循环中的处理:

c 复制代码
    //调试接口uart3收到数据
    if(uart3_rx_len != 0)
    {
      //
      
      //做完所有处理之后,将长度清0
      uart3_rx_len = 0;
    }
相关推荐
威嵌神州4 小时前
军工加固计算机七大核心特性解析|国产化、宽温、强加固工程实现
嵌入式硬件·计算机网络·fpga开发
Brilliantwxx4 小时前
【STM32】 深度详解总线架构 哈佛总线结构
stm32·嵌入式硬件·架构
恶魔泡泡糖4 小时前
stm32F103C8T6标准库DWT应用DHT11温湿度传感器数据手册说明
stm32·单片机·嵌入式硬件
深圳市恒锐丰科技杨生4 小时前
EG1192S 10‑100V 高压集成上管降压 DC‑DC|零功耗使能 Buck 电源芯片
嵌入式硬件·硬件工程
单片机仿真设计4 小时前
【Proteus 仿真】基于 STM32 单片机鸡舍环境监控系统设计(仿真 + 源码)
stm32·单片机·嵌入式硬件·proteus·毕设
李永奉5 小时前
中科蓝讯SDK开发-提示音音频文件格式转换和压缩教程
网络·单片机·嵌入式硬件·mcu·物联网
春风解人意5 小时前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习
单片机仿真设计6 小时前
【Proteus 仿真】基于 STM32 单片机智能楼宇照明控制系统设计(定制仿真咨询)
stm32·单片机·嵌入式硬件·proteus·毕设
ACP广源盛139246256736 小时前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
HUI-4747 小时前
EG1198|ESOP‑8 高性价比内置 MOS 降压 DC‑DC,10‑120V 小功率车载仪表优选
嵌入式硬件·硬件工程