STM32外部中断大问题

发布者:电子科技爱好者最新更新时间:2024-08-02 来源: elecfans关键字:STM32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

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


描述:开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.栈溢出:如果中断服务例程的调用栈溢出,可能会导致不稳定的行为


关键字:STM32  外部中断 引用地址:STM32外部中断大问题

上一篇:使用CubeMX创建基于STM32WL的LoRa应用
下一篇:STM32中断,看着一篇就够了

推荐阅读最新更新时间:2026-03-25 11:00

STM32的NVIC嵌套向量中断控制器与外部中断应用案例分析详解
前言   本文并不是简单介绍一下外部中断的使用和NVIC浅层的内容,而是从内核角度,深入剖析中断的内涵,中断向量表和MVIC内部机理,最后以外部中断使用案例结束。相信会给你带来惊喜。   对于嵌套向量中断控制器,也就是Nested vectored interrupt controller,缩写为NVIC,在所有的ARM Cortex-M3和Cortex-M4系列的所有芯片都适用,因为NVIC是内核层面的东西,不是一个外设,所以凡是这个内核的芯片,都有NVIC。于是本文虽从STM32F4入手讲解和使用案例分析,但对于其他芯片同样适用。本文具体参考的文档《The definitive guide to Arm Cortex-M3 a
[单片机]
<font color='red'>STM32</font>的NVIC嵌套向量中断控制器与<font color='red'>外部中断</font>应用案例分析详解
STM32外部中断原理与配置
STM32-外部中断原理与配置 IO口外部中断原理概述 STM32控制器支持的外部中断/事件请求 中断线 M3 M4 M7 EXTI线0~15:对应外部IO口的输入中断。 √ √ √ EXTI线16:连接到PVD输出。 √ √ √ EXTI线17:连接到RTC闹钟事件。 √ √ √ EXTI线18:连接到USB OTG FS唤醒事件。 √ √ √ EXTI线19:连接到以太网唤醒事件。 √ √ EXTI线20:连接到USB OTG HS(在FS中配置)唤醒事件 √ √ EXTI线21:连接到RTC入侵和时间戳事件。 √ √ EXTI线22:连接到RTC唤醒事件。 √ √ EXSTI线23
[单片机]
STM32外部中断控制器EXTI详解
1.概述 什么是外部中断控制器,外部中断控制器在STM32芯片中处于什么位置,它的作用是什么,EXTI与GPIO的映射关系? 1.1外部中断及外部中断控制器的定义:由外部GPIO高低电平变化引起的中断我们称之为外部中断,而外部中断控制器本质上是寄存器、配置该寄存器可以选择哪些GPIO的高低电平变化可以触发中断。 1.2外部中断控制器在STM32芯片中的位置:如下图所示处于片内外设部分 1.3外部中断控制器作用:用于管理那些由于GPIO引脚高低电平变化或者来自RTC和USB外设引起的中断 1.4EXTI与GPIO的映射关系:如下图所示标号为0的GPIO为一组(PA0 PB0 ...)这样的通道选择器共有16个,每个通道选
[单片机]
<font color='red'>STM32</font><font color='red'>外部中断</font>控制器<font color='red'>EXTI</font>详解
STM32外部中断
1、外部中断/事件线映射 从上表可知,STM32F10x 的 EXTI 供外部 IO 口使用的中断线有 16 根,但是我们使用的 STM32F103 芯片却远远不止 16 个 IO 口,那么 STM32F103 芯片怎么解决这个问题的呢?因为 STM32F103 芯片每个 GPIO 端口均有 16 个管脚,因此把每个 端 口 的 16 个 IO 对 应 那 16 根 中 断 线 EXTI0-EXTI15 。比 如 :GPIOx.0-GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 EXTI0-EXTI15,这样一来每个中断线就对应了最多 7 个 IO 口,比如:GPIOA.0、GPIOB.0、GPIOC.0、
[单片机]
<font color='red'>STM32</font>的<font color='red'>外部中断</font>
STM32 LL库中断配置引脚外部中断的方式
中断原理图 很多情况可以产生中断,开发者可以在CubeMx中NVIC选单、通讯模块选单处配置。请自行探索;部分中断有关的内容在模块讲解时·将会提到。 ※启用中断后,注意在System Core- NVIC- Code Generation中勾选生成IRQ Handler和 Select for init Sequence Ordering。 ※生成的中断函数定义在stm32fxxx_it.h和stm32fxxx_it.c中,向函数中填要执行的代码即可。 对于外部中断的事件分配,多个引脚将被分配到中断事件(具体可以参考文档),若需要区分则须在中断程序内写判断。判断方式之后给到 配置引脚外部中断的方式: ①在引脚图上选中需
[单片机]
<font color='red'>STM32</font> LL库中断配置引脚<font color='red'>外部中断</font>的方式
做单片机设计,STM32 GPIO外部中断你必须知道
一、STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断。 线 16:连接到 PVD 输出。
[单片机]
做单片机设计,<font color='red'>STM32</font> GPIO<font color='red'>外部中断</font>你必须知道
STM32配置外部中断EXTI)流程
1:配置外设GPIO端口(具体配置为请看配置GPIO流程) GPIO_Init(); 2:使能复用功能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 3:初始化外部中断以及配置中断映射 EXTI_InitTypeDef EXTI_InitStruct; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); //中断映射 EXTI_InitStruct.EXTI_Line = EXTI_Line0; //中断线 EXTI_I
[单片机]
STM32的中断操作(一)——EXTI
前言 在单片机的编程中,中断都是很重要的一个概念。在stm32中,中断有两种,一种是外部中断(EXTI),另一种是定时器中断(SysTick),本篇文章从中断的概念入手,再对外部中断简要的做一些介绍。 一、中断是什么? 相信大家在初学中断这个概念时都听过这样一个例子:如果你一个人在家里正在做饭,这时门铃响了,你选择先去开门,然后再回来做饭,这就是一个浅显易懂的中断的例子,做饭为主程序,而去开门就是中断程序,门铃响起就是中断请求。而如果门铃响起同时电话也响起,那么你决定先去处理哪一件事的过程就是中断优先级的判别过程。 中断的定义如下: 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并
[单片机]
<font color='red'>STM32</font>的中断操作(一)——<font color='red'>EXTI</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved