博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32CubeMX之串口不定长数据接收(接收中断+空闲中断)
阅读量:3781 次
发布时间:2019-05-22

本文共 1759 字,大约阅读时间需要 5 分钟。

概述

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

  1. 只能定长接收数据

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

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

文章目录

环境:

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

一. 空闲(IDLE)中断

1. 空闲帧

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-brYlUqqt-1594141130268)(/image/空闲帧图.png)]

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

二. 空闲中断相关的宏

  • 使能 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之串口使用(中断方式))的测试代码的基础之上进行修改。

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56b9XVPI-1594141130270)(/image/添加空闲中断处理函数.png)]

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

//自定义空闲中断处理函数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); /* Disable the UART Data Register not empty Interrupt */ __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); /* Disable the UART Parity Error Interrupt */ __HAL_UART_DISABLE_IT(huart, UART_IT_PE); /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); /* Rx process is completed, restore huart->RxState to Ready */ 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); } }

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vs370Tar-1594141130272)(/image/测试结构体添加初始化函数.png)]

使用初始化函数如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OoU5HqLG-1594141130278)(/image/串口初始化函数.png)]

用调试助手显示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RbiTSdul-1594141130282)(/image/不定长接收数据显示.png)]

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

​后续还会继续分享串口的其他基础知识和使用,感兴趣的小伙伴记得关注我

-----------------------------------------------结束--------------------------------------------------------
文章有价值,请各位看官点个赞关注我或者点右边打个赏

转载地址:http://pumvn.baihongyu.com/

你可能感兴趣的文章
PyQt5基础用法ui转py后需要修改的地方
查看>>
Scanner类
查看>>
基本类型包装类
查看>>
System类常用方法
查看>>
Runtime类、Math类和Random类的常用方法
查看>>
数据处理类常用方法
查看>>
Collections和Character类 常用静态方法
查看>>
HTML之Javascript——BOM浏览器对象模型
查看>>
JAVA基础中的基础
查看>>
JDBC基础操作
查看>>
连接池
查看>>
Servlet的使用——重定向和转发
查看>>
JSP技术的使用——好像过时了唉。。。。。
查看>>
MVC模式概述
查看>>
Web之过滤器Filter
查看>>
JSON和AJAX
查看>>
web之监听器listener
查看>>
类加载器
查看>>
数据库设计
查看>>
Java虚拟机的内存分配和运行机制(粗谈)
查看>>