STM32长时间工作后串口不能接收

2023-11-09

问题:记录一次STM32长时间工作后,串口不能正常接收数据,其他功能正常。
场景简单描述:在某一个产品上STM32作为前面板的控制,有多个中断开启,大部分的中断级别为0,串口的中断级别为1,串口中断接收,普通方式发送。出现长时间工作之后串口不能接收,但能正常发送数据。
问题分析

  1. 应该是串口接收的时候出现异常(溢出,因为串口中断接收的级别比较低,可能被其他的高优先级中断打断),STM32 HAL库的异常处理是没有有影响,晚上的例子是会不断进入中断
  2. 串口出现接收出现忙碌

针对第一个问题,在错误处理中断中加入溢出处理

HAL_StatusTypeDef g_RxStatus = 0;
void HAL_UART_RxCpltCallback( UART_HandleTypeDef* huart ) //¶¨Òå USART1 ½ÓÊÕÍê³É»Øµ÷º¯Êý¹¦ÄÜ
{
    /* Prevent unused argument(s) compilation warning */
    // UNUSED(huart);
    /* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
    // Check if there's space. Put received char in buffer.
    if( ringBufferPut( &g_UartRxBuffer, m_RecvChar ) == FALSE )
   {
       // no space in buffer, increment overflow counter
       m_UartRxOverflow++;
       ringBufferReset( &g_UartRxBuffer );
   }

    g_RxStatus = HAL_UART_Receive_IT( &huart1, &m_RecvChar, 1 );

    PDEBUGE( "uart rx status = %d\n", status );
}

void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
    /* Prevent unused argument(s) compilation warning */
    // UNUSED(huart);
    /* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_ErrorCallback could be implemented in the user file
*/
    if( huart->ErrorCode & HAL_UART_ERROR_ORE )//Overflow error
   {
       uint32_t temp = huart->Instance->SR;
       temp = huart->Instance->DR;
   }
}

针对串口忙碌,增加返回值判断,如果忙碌定时10ms重新检查

void CTRLCOM_CheckRxBusy()
{
   if( g_RxStatus == HAL_BUSY )
	 {
			g_RxStatus = HAL_UART_Receive_IT( &huart1, &m_RecvChar, 1 );
	 }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32长时间工作后串口不能接收 的相关文章

  • 在 Contiki 程序中使用 malloc

    考虑以下 Contiki 程序 include
  • 理解这部分手臂的汇编代码

    syntax unified thumb cpu cortex m4 arch armv7e m fpu fpv4 sp d16 Changes from unprivileged to privileged mode thumb func
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 ARM NEON 内在函数添加 alpha 和排列

    我正在开发一个 iOS 应用程序 需要相当快地将图像从 RGB gt BGRA 转换 如果可能的话 我想使用 NEON 内在函数 有没有比简单分配组件更快的方法 void neonPermuteRGBtoBGRA unsigned char
  • ARM Cortex A8 PMNC 读取在启用后也给出 0.. 有什么想法/建议吗?

    MODULE LICENSE GPL MODULE DESCRIPTION user mode access to performance registers int init arm init void unsigned int valu
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • arm-thumb指令集的blx指令如何支持4MB范围

    读自https www keil com support man docs armasm armasm dom1361289866046 htm https www keil com support man docs armasm arma
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • 了解 ctags 文件格式

    我使用 Exhuberant ctags 来索引我的 c 项目中的所有标签 c project 是 Cortex M7 微控制器的嵌入式软件 结果是一个标签文件 我正在尝试阅读该文件并理解所写的内容 根据我找到的 ctags 和 Exhub
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • 直接在 ARM 目标上调试单声道应用程序

    我最近在 BeagleBone 嵌入式 ARM 设备上安装了 Mono 希望通过 USB 连接 Kinnect 传感器并使用 C Mono 控制它 我想知道 Mono 我正在使用 MonoDevelop 但我想这个问题也适用于 VS 是否允
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor

随机推荐

  • openEuler怎么查询端口是否被占用-ChatGPT回答

    openEuler怎么查询端口是否被占用 ChatGPT回答 在 openEuler 系统中 你可以使用以下命令来查询端口是否被占用 查看所有使用中的端口 lsof i 查看指定端口是否被占用 lsof i 端口号 例如 查看 80 端口是
  • 高次谐波电压、电流主要有哪些危害?

    高次谐波电压 电流主要有哪些危害 答 高次谐波电流超过一定限度会引起发电机 变压器 电动机损失增大 产生过热 高次谐波电压可能引起设备异常振动 继电保护误动 计量误差增大 晶闸管装置失控和影响通信质量等 高次谐波电流 电压更容易使电力电容器
  • JS获取随机或指定数据

    1 不能全是相同的数字或者字母 如 000000 111111 222222 333333等等 2 不能是连续数字 如 123456 12345678 87654321等等 顺序表 static String orderStr static
  • 模板类的继承问题

    首先大家来看这段代码 plain view plain copy class A public void Show cout lt lt A Show lt lt endl void Fun cout lt lt A Fun lt lt e
  • [CVPR2020] DoveNet: Deep Image Harmonization via Domain Verification 论文解读

    论文地址和代码 数据库和代码已公布 https github com bcmi Image Harmonization Datasets 论文地址 https arxiv org abs 1911 13239 一 简介 图像合成 image
  • python selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id

    标题问题的解决办法参考了这篇文章 然后成功了 1条消息 关于新版本selenium定位元素报错 WebDriver object has no attribute find element by id 等问题 selenium新版本定位 热
  • ADC各参数含义

    文章目录 前言 一 ADC工作原理 二 详细参数 1 分辨率 2 转换率 采样率 转化时间 3 最低有效位 LSB 最高有效位 MSB 4 量化误差 5 SNR 6 失调误差 7 增益误差 8 微分非线性 DNL 9 积分非线性 INL 1
  • 《数据分析思维》:分析方法与业务知识

    小飞象 读书会 生活从来不会刻意亏欠谁 它给你一块阴影 必会在不远处撒下阳光 读书交流 3期 数据分析方法与业务知识 data analysis 分享人 木兮 欢迎大家参加这次读书会的直播分享 本次分享由学委木兮来带大家梳理一下 数据分析思
  • 【STM32篇】步进电机之S型曲线

    使用步进电机的S曲线算法的目的是为了使电机缓慢加速到目标转速或从高转速减速到0 防止电机在高转速时立即停止而对电机造成损伤 减少电机的使用寿命 本文主要讲述S型算法的使用 对于具体的原理 可通过其他博主的文章学习 图1 S算法加减速图 如图
  • libvirt笔记 PCI设备直通

    PCI设备直通功能允许将主机上的物理PCI设备直接分配给来宾机 客户操作系统驱动程序可以直接使用设备硬件 而无需依赖主机操作系统的任何驱动程序功能 在使用PCI设备直通时需要注意一些事项 当将PCI设备直接分配给客户机时 如果不首先从客户机
  • 静态代码和动态代码的区别_动态改变的代码设计思想

    前言 我看过很多书 知道那些作者在推广什么 相对书里的东西落地 还是一个不容易的过程 我看过很多行业的代码 持续多年的积累 聊过一些老板 对代码改造的看法 为什么 程序员这么难 我将用4个方向 来解释代码设计中的设计思路和方法 给大家展现一
  • Android登录 之 GooglePlay登录

    想法 写了好久代码了 但是都没有具体的总结下 总是用到的时候 再去翻看资料 一看就是一堆 到最后都不一定能管用 近期做了一些项目 涉及到了登录授权 细回想下 自己接过的登录授权还真心不少 不同的授权都会一一列举 以后方便自己 也希望能够方便
  • Fatal error: Cannot declare class ***, because the name is already in use in D:\www\test.php

    报错信息 Fatal error Cannot declare class because the name is already in use in D www test php on line 5 报错原因 该class 文件在其他引入
  • Tomcat控制台打印输出中文时的乱码问题

    这个问题我参考了许多网上的解决方法 这个方法是比较迅速与方便的 产生这个问题的原因是Windows默认编码集为GBK 由于使用startup bat启动Tomcat时 它会读取catalina bat的代码并打开一个新窗口运行 打开的cmd
  • 信号量详细解说

    1 信号量概述 进化版的互斥锁 1 gt N 由于互斥锁的粒度比较大 如果我们希望在多个线程间对某一对象的部分数据进行共享 使用互斥锁是没有办法实现的 只能将整个数据对象锁住 这样虽然达到了多线程操作共享数据时保证数据正确性的目的 却无形中
  • webdriver安装

    首先了解自己所需使用的浏览器 这里以谷歌浏览器为例 火狐 Edge安装方式相同 找相应webdriver即可 查看自己浏览器的版本 去官网找对应版本的webdriver 网址 http npm taobao org mirrors chro
  • SD3.0协议解读三

    SD卡功能描述 所有主机和SD卡间的通信都是由主机控制的 这和USB是一致的 例如 U盘并没有主动通知USB控制器的能力 USB鼠标也没有主动通知USB控制器的能力 当然 SD卡也是没有主动通知SD控制器的能力的 主机发送的命令有两种 一种
  • 几个开发模式

    瀑布模型 开发过程顺序进行 过程规范 有质量保证 但是不能够应对需求变化 更改代价较高 灵活性较低 V模型 基于瀑布模型 但是更强调测试过程 有质量保证 显示出不同层次上的测试方法 并且将测试阶段与开发阶段相联系 原型模型 主要解决核心问题
  • @RabbitListener起作用的原理

    一 前言 在spring中 定义rabbitMq的消费者可以相当方便 只需要在消息处理类或者类方法加上 RabbitListener注解 指定队列名称即可 如下代码 Component public class RabbitMqListen
  • STM32长时间工作后串口不能接收

    问题 记录一次STM32长时间工作后 串口不能正常接收数据 其他功能正常 场景简单描述 在某一个产品上STM32作为前面板的控制 有多个中断开启 大部分的中断级别为0 串口的中断级别为1 串口中断接收 普通方式发送 出现长时间工作之后串口不