stm32 HAL库 发送接受 到了一定的字符串后就卡在.s文件中

news2024/10/7 2:22:56

问题介绍:

某个项目开发过程中,串口接收中断,开启了DMA数据传输,开启了DMA中断,开启DMA半满中断。然后程序运行的过程中,接收了一部分数据后就会卡在启动文件的DMA1_Ch4_7_DMA2_Ch3_5_IRQHandler  中断里。

 如下图:

摘要:

本文主要干啥事内:某个项目开发过程中,串口接收中断,开启了DMA数据传输,开启了DMA中断,开启DMA半满中断。然后程序运行的过程中,接收了一部分数据后就会卡在启动文件的一个中断里。

本文介绍如何排查问题并解决该问题。

运行开发环境介绍

硬件环境

STM32F091CCT6

J-LINK  V11

软件开发环境

IAR 8.32.1 

VSCODE 

软件支持包ST官方HAL库

 STM32工程串口配置信息

STM32工程串口配置信息
串口接收中断   开启                                                                   
串口DMA开启
串口DMA半满中断开启
串口DMA全满中断开启

问题排查分析:

因为我用到了串口4   和DMA1 所以可以看出来,是DMA1串口中断出问题

经过仿真发现  程序总是接受了一段时间后,大约收到120字节数据后就进入上面的中断中。

而查看 串口配置里面  串口DMA接受缓冲区大小中好大约  256    256/2  128 

非常接近,怀疑是串口DMA接收过半函数中断出问题

验证:

在下面的地方仿真打断点:

发现 没有进入,而用串口1的时候,下面的函数是进入的。

总结

后来发现,这部分代码原来是支持一个串口,后来我改为两个串口的时候,没有将串口4的DMA中断服务函数进行重写,实现。

其实本来CUBE 是自动生成了的 

但是和我在usart.c里定义的冲突了  我就把这里的删除了

结果导致最后没人管串口4的DMA中断服务函数了。

打开注释。

容易踩的坑:

使用STM32 CUBE生成的程序,如果开启了生成串口中断服务函数后,如果你自己移植的代码中也有中断的服务函数就会报错函数重复定义,这时候如果屏蔽函数后忘记打开容易掉坑。  建议使用CUBE生成代码的时候不必要的中断服务函数直接别点自动生成了,中断服务函数的管理要理清楚,别弄懵了。

 美女镇楼!!!!!!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1305887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

源码角度简单介绍LinkedList

LinkedList是一种常见的数据结构,但是大多数开发者并不了解其底层实现原理,以至于存在很多误解,在这篇文章中,将带大家一块深入剖析LinkedList的源码,并为你揭露它们背后的真相。首先想几个问题,例如&#…

抖音怎么设置自动点赞视频和评论呢?

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 你是否曾被抖音那令人眼花缭乱的短视频所吸引,却苦于无法自动点赞和评论而错过那些精彩的瞬间?现在,让我们一起揭开抖音自动点赞和评论的神秘面…

centos卸载mysql库全流程

(1)暂停服务 systemctl stop mysqld (2)查看所有的安装包,将其卸载 rpm -qa |grep mysql rpm -q ( or --query) options -a 查询所有安装的软件包 (3)使用yum卸载安装的mysql [rootbo /…

数据结构之优先级队列(堆)及top-k问题讲解

💕"哪里会有人喜欢孤独,不过是不喜欢失望。"💕 作者:Mylvzi 文章主要内容:数据结构之优先级队列(堆) 一.优先级队列 1.概念 我们已经学习过队列,队列是一种先进先出(FIFO)的数据结构&#xff…

Flask维护者:李辉

Flask维护者:李辉, 最近看b站的flask相关,发现了这个视频:[PyCon China 2023] 濒危 Flask 扩展拯救计划 - 李辉_哔哩哔哩_bilibili 李辉讲他在维护flask之余,开发了apiflask这个依托flask的框架。GitHub - apiflask/a…

电商淘宝爬虫API与淘宝官方开放平台API的区别以及如何选择适合自己的API接口

随着数字化时代的到来,数据已经成为企业竞争力的重要因素。为了获取数据,企业或个人常常需要使用API接口。常见的API接口包括爬虫API和官方开放平台API。本文将详细介绍这两种API接口的区别以及如何选择适合自己的API接口。 一、爬虫API与官方开放平台A…

Docker部署Nacos集群并用nginx反向代理负载均衡

首先找到Nacos官网给的Github仓库,里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理,负载均衡…

1844_高边驱动以及低边驱动的选择

Grey 全部学习内容汇总:GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1844_高边驱动以及低边驱动的…

HarmonyOS鸿蒙应用开发——数据持久化Preferences

文章目录 数据持久化简述基本使用与封装测试用例参考 数据持久化简述 数据持久化就是将内存数据通过文件或者数据库的方式保存到设备中。HarmonyOS提供两两种持久化方案: Preferences:主要用于保存一些配置信息,是通过文本的形式存储的&…

装饰模式-设计模式

装饰模式 1.动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不…

【Flink系列七】TableAPI和FlinkSQL初体验

Apache Flink 有两种关系型 API 来做流批统一处理:Table API 和 SQL Table API 是用于 Scala 和 Java 语言的查询API,它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。 Flink SQL 是基于 Apache Calcite 来实现的标准 SQL。无论输…

C++ 11 异常

在C语言中,我们也有不少处理错误的方式,但是我们将这些处理错误的方式带到C 中,随着C不断更新的语法规则和内容下,这些C语言的处理方式还够用吗? 一.C语言的错误处理方式 C语言处理错误的方式大概有两种: …

环境安全之配置管理及配置安全设置指导

一、前言 IT运维过程中,配置的变更和管理是一件非常重要且必要的事,除了一般宏观层面的配置管理,还有应用配置参数的配置优化,本文手机整理常用应用组件配置项配置,尤其安全层面,以提供安全加固指导实践。…

mysqlclient安装失败

错误代码如下: 原因:缺少依赖项 从您所提供的错误日志中可以看出,尝试安装mysqlclient时出现了问题。错误的核心部分是: Can not find valid pkg-config name. Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually 这表…

高通平台开发系列讲解(USB篇)MBIM协议详解

文章目录 一、MBIM协议二、MBIM 消息类型三、基本控制消息构成3.1、MBIM OPEN MSG FORMAT3.2、MBIM CLOSE MSG FORMAT3.3、MBIM_COMMAND_MSG3.4、MBIM_COMMAND_DONE3.5、MBIM_INDICATE_STATUS_MSG四、MBIM Message(UUID+CID)4.1、UUID_BASIC_CONNECT

redis的深度理解

上篇博客我们说到了redis的基本概念和基本操作,本篇我们就更深入去了解一些redis的操作和概念,我们就从red的主从同步、redis哨兵模式和redis集群三个方面来了解redis数据库 一、主从同步 像MySQL一样,redis是支持主从同步的,而…

12月12日作业

设计一个闹钟 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass …

【深度学习】强化学习(六)基于值函数的学习方法

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数6、值函数7、深度强化学习 二、基于值函数的学习方法 一、强化学习问题 强化学习的基本任务是通过智能体与环境的交互学习一个策略…

GeMap:Online Vectorized HD Map Construction using Geometry

参考代码&#xff1a;GeMap 动机与出发点 出了原本针对单点的L1损失&#xff0c;车道线具备的几何结构信息作为监督信息也可以再被挖掘挖掘&#xff0c;像车道线实例中点和点之间的距离与夹角、线与线之间的夹角、不同线上点与点之间的关系都可用来作为监督约束&#xff0c;但…

Redis - RDB与AOF持久化技术

Redis 持久化技术 RDB 是默认持久化方式&#xff0c;但 Redis 允许 RDB 与 AOF 两种持久化技术同时 开启&#xff0c;此时系统会使用 AOF 方式做持久化&#xff0c;即 AOF 持久化技术的优先级要更高。同样的道 理&#xff0c;两种技术同时开启状态下&#xff0c;系…