STM32 HAL库串口突然不再接收数据的异常情况

这篇具有很好参考价值的文章主要介绍了STM32 HAL库串口突然不再接收数据的异常情况。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32串口接收分为阻塞式接收和中断式接收。

1、中断+DMA接收

出现突然不再接收数据的异常情况,最有可能的情况为ORE错误和BUSY标志位持续置高。

解决方法:在重新打开中断接收前,使用__HAL_UART_CLEAR_OREFLAG(huart);函数清除ORE错误;如果串口中断重新接收打开频繁且间隔短的话,有可能会出现BUSY标志位持续置高的情况,此时在重新打开中断接收前,需要先判断串口状态是否为HAL_BUSY,再判断是否能重新打开。

2、阻塞式接收

阻塞式接收为定长字节字节数,阻塞式接收突然不再接收数据的异常情况,大多数都是因为实际接收的字节超过了设定接收的字节长度,此时会导致ORE错误,且ORE错误一旦出现,后续的串口数据就不会再写入到缓存中。

解决方法:HAL_UART_Receive();函数没有清除ORE错误的功能,只要在调用这个函数前使用__HAL_UART_CLEAR_OREFLAG(huart);函数清除ORE错误。同时还要取出当前串口缓存中的数据,否则会有一个字节的数据停留在串口接收缓冲区中,导致这个字节数据成为下一帧的帧头,且下一帧字节数又会不正常,再次触发ORE错误。

代码如下:

//判断是否触发了ORE错误
    if(__HAL_UART_GET_FLAG(&huart, UART_CLEAR_OREF) != RESET)
    {
        //取出串口缓存中多余的字节数
        uint8_t data = (uint8_t)(huart.Instance->RDR);
        //清除ORE错误
        __HAL_UART_CLEAR_FLAG(&huart, UART_CLEAR_OREF);
    }文章来源地址https://www.toymoban.com/news/detail-540051.html

到了这里,关于STM32 HAL库串口突然不再接收数据的异常情况的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32(HAL)串口中断接收

    目录 1、简介 2 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合 本文对HAL串口中断函数进行介绍。 2.1.1 SYS配置  2.1.2 RCC配置 首先在main.c文件中进行接受变量声明。  接着在主函数的while循环中进行接收中断,如下所示:  最后在主函数

    2024年02月14日
    浏览(49)
  • STM32--HAl库串口接收与发送

            在此之前,我们已经学习了单片机串口通信的原理(江科协),再写一遍我个人认知:世界上任何两个事物如果要进行交流的话,那必然需要两个东西进行通信的,就像两个人之间,两个国人之间用普通话就能够清楚的交流,但是让我们中国人和外国人去交流可能会

    2024年04月10日
    浏览(51)
  • 【STM32】HAL库 串口中断发送与接收

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 使用stm32串口中断发送和中断接收 在主函数前开启中断,接受字节数为5 接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回 修改接收数组长度,改为开启串口空闲中断 接收事件回调函数

    2024年02月08日
    浏览(57)
  • STM32_HAL库串口接收相关函数分析

    串口接收的程序整体分为三个部分:初始化部分,开启中断部分,中断函数部分: 初始化部分: 该部分主要完成相关引脚的初始化,串口的初始化(设置波特率,校验位,字长等),为了逻辑清晰,把初始化相关代码放在本文的最后。 开启中断部分: 调用HAL_UART_Receive_IT函数

    2024年02月16日
    浏览(40)
  • 【STM32】HAL库 STM32CubeMX——DMA (串口DMA发送接收)

    软件: STM32CubeMX KEIL5 mcuisp 串口通信助手 硬件: STM32F103C8Tx 杜邦线,面包板,USB转TTL DMA,全称Direct Memory Access,即直接存储器访问。 DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 我们知道系统的运

    2024年02月12日
    浏览(63)
  • 【STM32】HAL库——串口中断只接收到两个字符

    环境:STM32CubeMX(6.7.0)+MDK-ARM(V5.36.0.0)+STM32F103C8T6 使用XCOM发送字符串(总共8个字符),单片机进行解析为ModBus协议失败,只接收到前两个字节的数据。 原串口中断回调函数: 去掉串口中断回调函数的printf函数即可 在嵌入式系统中,将printf函数直接放在串口中断服务程序(ISR)中

    2024年01月22日
    浏览(46)
  • 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    【STM32】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全、首字节错误的问题) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无

    2024年02月14日
    浏览(36)
  • 【STM32】CUBEMX之串口:串口三种模式(轮询模式、中断模式、DMA模式)的配置与使用示例 + 串口重定向 + 使用HAL扩展函数实现不定长数据接收

    目录   总览 使用CUBEMX创建工程的基本配置 CUBEMX中的配置 Keil中的配置 实物连接 串口轮询模式 轮询模式HAL库函数 特点 实验一:发送数据给单片机并让其返回相同值 串口重定向 串口中断模式 在CUBEMX中打开串口中断 中断模式HAL库函数 特点 实验二:使用中断回调完成实验一

    2024年04月10日
    浏览(65)
  • STM32CubeMX-HAL库-UART串口接收中断回调函数代码分析

            CubeMx中HAL库函数的调用不同于库函数调用,在学习CubeMx串口通信时,不理解HAL库中的回调函数是怎么被调用的,于是查看每个的定义,参考其他人写的博客,总算弄明白了HAL库中断调用与库函数不同之处。写下这篇博客一是加深自己的理解,二是希望对不理解HA

    2024年02月02日
    浏览(51)
  • 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决)

    【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决) 最近做项目时 用到了STOP1停止模式的串口唤醒 唤醒配置如下: 【STM32】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题) 我

    2024年01月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包