登录/注册

STM32串口接收IDLE

STM32串口接收IDLE

更多

在STM32中,利用串口接收空闲中断(IDLE)可以有效检测数据帧结束,特别适用于接收不定长数据帧。以下是关键操作步骤:


核心步骤

  1. 开启IDLE中断

    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 使能IDLE中断
  2. 清除空闲中断标志
    在中断服务函数中清除IDLE标志(通过读DR寄存器):

    void USART1_IRQHandler(void) {
     if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET) {
       __HAL_UART_CLEAR_IDLEFLAG(&huart1); // 清除空闲标志
       // 处理接收完成逻辑(见步骤3)
     }
    }
  3. 处理接收完成的数据
    在IDLE中断中获取已接收的数据长度并处理:

    uint8_t data;
    HAL_UART_Receive(&huart1, &data, 1, 0); // 尝试接收1字节(实际是触发清除DR)
    
    // 获取当前接收到的数据长度
    uint16_t rx_len = RECEIVE_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
    
    // 设置数据接收完成标志
    uart1_rx_complete = 1;

完整配置流程

  1. 串口初始化(开启接收DMA):

    HAL_UART_Receive_DMA(&huart1, uart1_rx_buf, BUF_SIZE);
  2. 开启IDLE中断

    __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  3. USARTx_IRQHandler中处理

    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE)) {
     __HAL_UART_CLEAR_IDLEFLAG(&huart1);
    
     // 读取DR寄存器以清除中断标志
     volatile uint32_t temp = huart1.Instance->DR;
     (void)temp; // 防止编译器警告
    
     // 计算接收数据长度
     uint16_t len = BUF_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
    
     // 重启DMA以接收下一帧
     HAL_UART_Receive_DMA(&huart1, uart1_rx_buf, BUF_SIZE);
    
     // 处理数据:uart1_rx_buf[0]到uart1_rx_buf[len-1]
     ProcessData(uart1_rx_buf, len); // 用户处理函数
    }

关键点说明

通过上述配置,可实现高可靠性的不定长数据帧接收,适用于Modbus、自定义协议等场景。实际使用时需注意缓冲区溢出防护和错误中断处理。

STM32串口中断及DMA接收常见的几个问题

STM32串口中断及DMA接收常见的几个问题

2023-10-26 16:41:12

STM32串口中断接收不定长报文介绍

本项目中,需要使用STM32的USART6串口与FPGA板(下位机)通信,需要发送和接收数据,有报文应答机制。

2023-10-26 11:01:55

STM32串口通信简明知识

STM32串口通信简明知识

2023-10-25 15:48:39

STM32串口1通讯实验程序下载

STM32串口1通讯实验程序下载

资料下载 郑兵 2021-12-30 10:34:29

stm32串口

DMA发送缓存区bsp_usart.cbsp_usart.hisr.c基于stm32f103zet6串口发送使用DMA发送大致说明USART_Rx_Sbuffer二维数组 ->

资料下载 h1654155957.9921 2021-12-24 18:55:26

stm32串口代码详解

stm32串口

资料下载 佚名 2021-12-24 18:38:26

STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA

方法:一种是 :IDLE 接收空闲中断+DMA一种是: IDLE 接收空

资料下载 张龙祥 2021-12-20 19:39:04

STM32串口接收不定长数据的程序免费下载

本文档的主要内容详细介绍的是STM32串口接收不定长数据的程序免费下载。

资料下载 如梦之梦1 2020-08-26 08:00:00

STM32串口发送数据和接收数据方式总结

STM32串口发送数据和接收数据方式总结

2023-09-19 09:14:52

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

2023-09-18 10:58:44

如何去实现STM32串口接收不定长数据原理与源程序呢

**STM32串口接收不定长数据原理与源程序**CSDN上有很多关于STM32

2022-03-02 07:40:52

求分享STM32_H750串口接收不定长数据及初始化进入idle中断的解决方法

求分享STM32_H750串口接收不定长数据及初始化进入idle中断的解

2021-12-16 07:40:07

STM32串口接收具体的配置过程是怎样的

STM32串口接收的流程是怎样的?STM32

2021-12-08 07:39:36

stm32串口IDLE+DMA接收数据不正常是为什么?

stm32串口IDLE+DMA接收数据不正常是为什么?

2021-12-07 07:36:50

STM32串口中断 DMA接收的几点注意地方

STM32串口中断、DMA接收的几点注意地方

2020-03-04 13:57:48

7天热门专题 换一换
相关标签