STM32CubeMX之串口不定长数据接收(接收中断+空闲中断)

   日期:2020-07-10     浏览:572    评论:0    
核心提示:概述​ 上一篇讲了用串口中断的方式接收数据,但是它有两个缺点只能定长接收数据如果数据超出,那么产生溢出中断,那时发送的数据将不再接收所以接下来就会用 IDLE 中断来解决这个问题文章目录概述一. 空闲(IDLE)中断1. 空闲帧二. 空闲中断相关的宏三. 空闲中断使用实例环境:开发板:STM32F4探索者(正点原子)一. 空闲(IDLE)中断1. 空闲帧​ 什么是空闲帧?在 STM32的中文参考手册 中,你会发现如下解释:​ 空闲帧可理解为整个帧周期内电平均为“1

概述

​ 上一篇讲了用串口中断的方式接收数据,但是它有两个缺点

  1. 只能定长接收数据

  2. 如果数据超出,那么产生溢出中断,那时发送的数据将不再接收

    所以接下来就会用 IDLE 中断来解决这个问题

文章目录

      • 概述
      • 一. 空闲(IDLE)中断
        • 1. 空闲帧
      • 二. 空闲中断相关的宏
      • 三. 空闲中断使用实例

环境:

  • 开发板:STM32F4探索者(正点原子)

一. 空闲(IDLE)中断

1. 空闲帧

​ 什么是空闲帧?在 STM32的中文参考手册 中,你会发现如下解释:

​ 空闲帧可理解为整个帧周期内电平均为“1”(停止位的电平也是“1”),该帧后是下一个数据帧的起始位。如下图所示:

​ 其实按使用的情况来看,应是数据帧接收之后,从停止位开始一直为高电平,一直持续一帧的时间(包含停止位)为高电平,那时就会产生空闲中断。

二. 空闲中断相关的宏

  • 使能 IDLE 中断

    __HAL_UART_ENABLE_IT(__HANDLE__, UART_IT_IDLE)    //使能idle中断
    
  • 获取 IDLE 中断标志位

    __HAL_UART_GET_FLAG(__HANDLE__, UART_IT_IDLE)
    
  • 清除IDLE 挂起标志位

    __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) 
    

三. 空闲中断使用实例

​ 在上一篇文章(STM32CubeMX之串口使用(中断方式))的测试代码的基础之上进行修改。

​ 在串口中断处理函数中添加自定义的空闲中断处理函数 ,如下图所示:

然后在主函数中,进行自定义空闲中断处理函数 ,如下

//自定义空闲中断处理函数
void HAL_UART_IDLE_HANDLER(UART_HandleTypeDef *huart)
{
   uint32_t isrflags   =  READ_REG(huart->Instance->SR); 
   if((USART_SR_IDLE & isrflags) != RESET && ( huart->RxXferCount > 0))
   {
       printf("idle\r\n");
       __HAL_UART_CLEAR_IDLEFLAG(huart);
      
      __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
      
      __HAL_UART_DISABLE_IT(huart, UART_IT_PE);
      
      __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
      
      huart1.RxState = HAL_UART_STATE_READY;  
      HAL_UART_RxCpltCallback(huart); 
   }else if((USART_SR_IDLE & isrflags) != RESET && ( huart->RxXferCount == 0 ))
   { 
       __HAL_UART_CLEAR_IDLEFLAG(huart);
      
   } 
}

在测试串口的结构中,添加初始化函数用来初始化使能空闲中断,如下图

使用初始化函数如下:

用调试助手显示如下:

测试代码已上传,欢迎下载。

​后续还会继续分享串口的其他基础知识和使用,感兴趣的小伙伴记得关注我
-----------------------------------------------结束--------------------------------------------------------
文章有价值,请各位看官点个赞关注我或者点右边打个赏

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服