STM32外部中断大问题

32f39186df45b68e9ab74269667a4793.png

问题:一直进入中断,没有触发信号,也一直进入。

描述:开PA0为外部中断,刚刚很好,一个触发信号一个中断,中断函数没有丢,也没有抢跑,开PA1为外部中断也是,都很好,只要能开到3个外部中断以上,就会出现这种情况,明明没有触发外部中断,可是中断服务函数还是不断的++。

   

问题一:电气噪声和抖动

电气噪声和抖动是常见的问题,可能会导致STM32的外部中断不断触发,即使没有明显的触发信号。以下是一些处理电气噪声和抖动的方法:

1.添加电容滤波器:在外部中断引脚上添加适当大小的电容,以平滑信号并抑制高频噪声。电容的值应根据信号频率和噪声特性进行选择。

2.使用滤波器电路:在外部信号引脚前添加滤波器电路,如低通滤波器,以滤除高频噪声。这可以是RC(电阻-电容)滤波器或其他合适的滤波器。

3.增加上拉/下拉电阻:使用外部上拉或下拉电阻,以增加信号的稳定性。这有助于确保信号在未连接到外部源时维持稳定的逻辑电平。

4.硬件抖动消除电路:使用硬件抖动消除电路,如Schmitt触发器,以抵抗瞬时信号变化引起的抖动。

5.增加软件消抖:在中断服务例程中实现软件抖动消除。这意味着只有在信号保持稳定一段时间后才触发中断,而不是立刻触发。

6.检查信号线和地线:确保信号线和地线连接正确,避免共模干扰。使用良好的接地和信号线布局规则。

7.屏蔽未使用的引脚:在STM32上未使用的引脚可以被配置为输出并拉低,以防止它们接收到干扰信号。    

8.选择合适的外部电源:使用稳定的电源供应,避免电源波动引起的问题。

9.地线屏蔽:对于特别嘈杂的环境,可以考虑在地线上添加屏蔽层,以减少共模噪声。

方法二:代码配置问题

如果外部中断一直触发,但中断源明明没有给触发信号,代码配置错误可能是一个潜在的问题。以下是该问题的一些解决方法:

1.配置错误的中断源:STM32具有多个外部中断线,每个中断线可以与多个引脚相关联。确保你正确选择了要与外部中断线相关联的引脚。此外,还要确保你正确配置了中断线的触发方式和优先级。

2.未正确初始化HAL库:如果你使用HAL库,确保在程序开始时正确初始化HAL库,包括系统时钟的配置。

3.合理设置优先级:根据你的应用需求,为每个中断源设置适当的优先级。通常,更重要的中断应具有更高的优先级。注意,不要将所有中断设置为相同的优先级,因为这可能会导致不稳定的中断处理。

4.分组优先级的选择:STM32允许你在中断优先级分组和子优先级之间进行权衡。分组优先级位数的选择取决于应用的需求。较长的分组优先级位数允许更多的分组,但可能限制子优先级的数量。较短的分组优先级位数允许更多的子优先级,但可能限制分组数。

5.处理多级中断:如果你有多个中断源,确保正确设置它们的优先级,以确保较高优先级的中断可以打断较低优先级的中断。这在实时性要求较高的系统中尤为重要。

6.不要忽略系统中断:STM32还有一些系统中断,如SysTick定时器中断,这些中断对系统的正常运行非常重要。在设置中断优先级时,不要忽略这些系统中断。

7.避免中断嵌套问题:在某些情况下,中断嵌套可能会引起问题。确保不会出现不必要的中断嵌套,以避免优先级争夺和死锁问题。    

8.引脚模式错误:确保你已正确配置外部中断引脚的模式。在HAL库中,可以使用 `HAL_GPIO_Init` 函数或直接设置寄存器来配置引脚模式。外部中断引脚应配置为输入模式。示例(使用HAL库):

GPIO_InitTypeDef GPIO_InitStruct;
   GPIO_InitStruct.Pin = GPIO_PIN_0;
   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

9.引脚状态错误:检查引脚的初始状态。外部中断引脚可能需要上拉或下拉电阻来确保初始状态是稳定的。示例(使用HAL库):

GPIO_InitStruct.Pull = GPIO_PULLUP; // 或 GPIO_PULLDOWN

10 触发方式设置错误:外部中断可以根据信号的上升沿、下降沿或两者都触发。确保你选择了正确的触发方式。示例(使用HAL库):

EXTI_InitStruct.Trigger = EXTI_TRIGGER_RISING_FALLING; // 或 EXTI_TRIGGER_RISING 或 EXTI_TRIGGER_FALLING

11. 中断引脚编号错误:STM32有多个引脚可用于外部中断,确保你选择的引脚编号与硬件连接匹配。不同的STM32型号可能有不同的引脚分配。

12. 中断线配置错误:某些STM32型号允许将多个引脚连接到相同的中断线。确保你正确配置了中断线以将引脚连接到外部中断。

13. 未启用中断线:在使用外部中断之前,需要启用中断线。在HAL库中,你可以使用 `HAL_NVIC_EnableIRQ` 函数来启用中断线。示例(使用HAL库):

HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 启用中断线0

14.中断服务例程过长:中断服务例程应尽量简洁和高效,不应占用太多时间。如果中断服务例程过长,可能会导致其他中断无法及时触发,或者导致系统性能问题。确保中断服务例程只包含必要的操作,避免执行复杂的计算或大量的数据传输。

15.未清除中断标志:如果中断服务例程未清除中断标志,可能会导致中断不断触发,因为中断标志仍然保持为1。

16.全局中断嵌套问题:如果中断嵌套配置不正确,可能会导致问题,如死锁或中断争夺。

17.栈溢出:如果中断服务例程的调用栈溢出,可能会导致不稳定的行为。  

==========

往期回顾:

【笔记】单片机卡死的八大原因和解决方法

【PID专题】MATLAB如何实现PID?

【PID专题】控制算法PID之积分控制(I)的原理和示例代码

【PID专题】控制算法PID之比例控制(P)的原理和示例代码

==========

2885ccabe92f4dbb065613c4e45f2bea.png

156c02a4b340b276ad924f3b1ab6b0da.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nfs配置

1.NFS介绍 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操 作系统可以共享彼此的文件。 NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文 件系统中,而在本地端的系统中来看&#…

C++初阶 | [二] 类和对象(上)

摘要:class,成员函数,成员变量,类的大小,this 指针 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象…

CSS 网页布局

网页布局有很多种方式&#xff0c;一般分为以下几个部分&#xff1a;头部区域、菜单导航区域、内容区域、底部区域&#xff1a; 1&#xff09;、头部区域位于整个网页的顶部&#xff0c;一般用于设置网页的标题或者网页的logo。 <style> body { margin: 0; } /* 头部样…

【Redis】list常用命令内部编码使用场景

文章目录 前置知识列表类型的特点 命令LPUSHLPUSHXRPUSHRPUSHXLRANGELPOPRPOPLINDEXLREMLINSERTLTRIMLSETLLEN 阻塞版本命令BLPOPBRPOP 命令总结内部编码测试内部编码 使用场景消息队列分频道的消息队列 模拟栈和队列 前置知识 列表类型是⽤来存储多个有序的字符串&#xff0c…

软件测试|Monkey基本参数介绍

说到android移动端稳定性测试&#xff0c;大家通常会想到android系统自动Monkey小猴子&#xff0c;通过Monkey命令模拟用户触摸点击屏幕、滑动、系统按键等操作来对设备上的app进行压力测试&#xff0c;来测试应用的稳定性和健壮性。 下面就说说monkey常用参数的用法~~ 1、-h…

Spring笔记(二)(黑马)(AOP面向切面编程)

01、AOP 简介 1.1 AOP的概念 AOP&#xff0c;Aspect Oriented Programming&#xff0c;面向切面编程&#xff0c;是对面向对象编程OOP的升华。OOP是纵向对一个事物的抽象&#xff0c;一个对象包括静态的属性信息&#xff0c;包括动态的方法信息等。而AOP是横向的对不同事物的…

spdk用户态块层详解

先通过回顾内核态的通用块层来详细介绍SPDK通用块层&#xff0c;包括通用块层的架构、核心数据结构、数据流方面的考量等。最后描述基于通用块层之上的两个特性&#xff1a;一是逻辑卷的支持&#xff0c;基于通用块设备的Blobstore和各种逻辑卷的特性&#xff0c;精简配置&…

C# OpenCvSharp 去除文字中的线条

效果 中间过程效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms; using static System.Net.Mime.MediaTypeNames;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent…

Spring面试题:(四)Spring Bean生命周期

Bean生命周期的阶段 实例化初始化完成销毁 IoC容器实例化Bean的流程 Bean定义 Bean工厂处理 反射实例化Bean 初始化 完成存储到单例池 Bean生命周期 Bean初始化话过程 属性填充aware接口BeanPostProcessor前置处理InitialzingBean接口初始化方法自定义init方法BeanPost…

Oracle(15)Managing Users

目录 一、基础知识 1、Users and Security 用户和安全 2、Database Schema 3、Checklist for Creating Users创建用户步骤 二、基础操作 1、创建一个用户 2、OS Authentication 操作系统身份验证 3、Dropping a User 删除用户 4、Getting User Information 获取用户信…

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

一、EMQX介绍 这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。 Windows版本的看这里: https://blog.csdn.net/xiaolong1126626497/article/details/1…

经验模态分解(Empirical Mode Decomposition,EMD)(附代码)

代码原理 EMD&#xff08;Empirical Mode Decomposition&#xff09;&#xff0c;也称为经验模态分解&#xff0c;是一种将非线性和非平稳信号分解成多个本征模态函数&#xff08;Intrinsic Mode Functions&#xff0c;简称IMF&#xff09;的方法。 EMD的基本原理是通过一系列…

掌动智能:UI自动化测试工具产品功能和优势

UI自动化测试工具是一种软件工具&#xff0c;用于模拟用户与应用程序的交互&#xff0c;检查应用程序的用户界面是否按预期工作。这些工具允许开发人员编写测试脚本&#xff0c;以模拟用户操作&#xff0c;例如点击按钮、输入文本、导航菜单等&#xff0c;然后验证应用程序的响…

哪款手机便签软件支持存储录音文件并支持转文字?

手机便签类软件带有存储录音转文字功能是比较实用的&#xff0c;很多人通常会整理很多录音类型的文件&#xff0c;录音文件整合在一起后&#xff0c;后续有需要可以逐条点开播放收听。尤其是在工作中&#xff0c;当领导说一些重点时&#xff0c;大家无法借助灵活的大脑来成功的…

如何判断被DDoS攻击

当网络和设备正常的情况下&#xff0c;服务器突然出现连接断开、访问卡顿、用户掉线等情况;服务器CPU或内存占用率出现明显增长;网络出入流量出现明显增长;网站或应用程序突然出现大量的未知访问;登录服务器失败或者登录过慢等等。以上是最为常见的服务器被 DDoS攻击后出现的几…

2.3 - 网络协议 - ICMP协议工作原理,报文格式,抓包实战

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 ICMP协议 1、ICMP协议工作原理2、ICMP协议报文格式…

el-date-picker精确到分钟

0 效果 1 代码 使用format、value-format属性格式化即可 :clearable“false” // 取消删除图标 注意&#xff1a; format&#xff1a;“yyyy-MM-dd HH:mm” 小时默认是从00:00开始 format&#xff1a;“yyyy-MM-dd hh:mm” 小时默认是从12:00开始

【爬虫】Java爬虫爬取某招聘网站招聘信息

目录 前言 一、爬虫程序的基本架构 二、如何获取目标网站的页面内容 三、解析HTML页面&#xff0c;提取所需信息 四、代理IP的使用 五、完整代码 总结 前言 随着互联网的普及&#xff0c;越来越多的人开始关注网络上的招聘信息&#xff0c;而传统的求职方式愈发显得不够…

docker部署mysql

docker部署mysql Docker部署MySQL配置远程登录持久化数据创建容器时配置挂载卷后置配置挂载卷 Docker卸载MySQL部署特定版本mysql【出现1251错误】远程连接docker容器中的mysql8.0数据库时出现连接不上 Docker部署MySQL 要使用Docker部署MySQL&#xff0c;你可以使用官方的MyS…