0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32外部中断大问题

撞上电子 2023-11-08 08:00 次阅读

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

描述:开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
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348809
  • 信号
    +关注

    关注

    11

    文章

    2640

    浏览量

    75389
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41027
收藏 人收藏

    评论

    相关推荐

    外部中断的工作原理 外部中断方式有哪些 为什么要使用外部中断

    外部中断的工作原理是单片机响应外部事件的一种机制** **。
    的头像 发表于 01-28 17:37 1447次阅读

    stm32f1如何将外部中断关掉hal库

    Layer)来简化芯片和外设的驱动开发。在STM32F1中,外部中断的关闭是通过HAL库中的相应函数来实现的。下面我将详细介绍如何使用HAL库关闭外部
    的头像 发表于 12-22 13:52 1185次阅读

    STM32CubeMX的外部中断的使用

    库的中断处理较为复杂:startup_stm32f103xb.s通过汇编注册了中断处理函数EXTI1_IRQHandler(),在stm32f1xx_it.c中,
    的头像 发表于 11-26 08:00 307次阅读
    <b class='flag-5'>STM32</b>CubeMX的<b class='flag-5'>外部</b><b class='flag-5'>中断</b>的使用

    STM32基于标准外设库的外部中断配置

    本文介绍了STM32基于标准外设库的外部中断配置,以及基于参考手册如何更加寄存器配置外部中断
    的头像 发表于 11-02 14:13 880次阅读
    <b class='flag-5'>STM32</b>基于标准外设库的<b class='flag-5'>外部</b><b class='flag-5'>中断</b>配置

    单片机外部中断的好处

    外部中断是单片机实时地处理外部事件的一种内部机制。当外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行
    的头像 发表于 10-31 15:58 1082次阅读
    单片机<b class='flag-5'>外部</b><b class='flag-5'>中断</b>的好处

    STM32如何配置外部中断STM32外部中断配置步骤

    STM32如何配置外部中断STM32外部中断配置步骤  作为一款现代化的微控制器,
    的头像 发表于 10-26 17:47 2102次阅读

    STM32学习笔记一外部中断

    STM32 的每个 IO 都可以作为外部中断中断输入口。STM32F103 的中断控制器支持
    的头像 发表于 10-24 14:12 688次阅读
    <b class='flag-5'>STM32</b>学习笔记一<b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    STM32单片机外部中断简介 STM32单片机外部中断的配置过程

    STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块以及优秀的扩展性,开发周期短、成本低。在单片机应用中,外部中断是一种重要的硬件触发方式,本文将对
    发表于 08-15 18:21 2026次阅读

    STM32L4外部中断及事件控制模块(EXTI)

    电子发烧友网站提供《STM32L4外部中断及事件控制模块(EXTI).pdf》资料免费下载
    发表于 08-01 10:23 0次下载
    <b class='flag-5'>STM32</b>L4<b class='flag-5'>外部</b><b class='flag-5'>中断</b>及事件控制模块(EXTI)

    STM32CUBEMX开发GD32F303(15)----外部中断EXTI

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 使用外部中断EXTI进行驱动LED。
    的头像 发表于 07-26 15:53 833次阅读
    <b class='flag-5'>STM32</b>CUBEMX开发GD32F303(15)----<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXTI

    STM32CUBEIDE(14)----外部中断EXTI

    外部中断和事件控制器 (EXTI) 管理外部和内部异步事件 / 中断,并生成相应的事件请求到CPU/ 中断控制器和到电源管理的唤醒请求。本例
    的头像 发表于 07-26 14:33 962次阅读
    <b class='flag-5'>STM32</b>CUBEIDE(14)----<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXTI

    STM32单片机学习笔记(8):外部中断

    利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。本项目需要实现的功能就是利用CubMX配置外部中断,由
    发表于 07-20 15:32 503次阅读
    <b class='flag-5'>STM32</b>单片机学习笔记(8):<b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    STM32F407 外部中断配置步骤

    介绍STM32F407外部中断配置步骤,以按键为例,实现外部中断配置,使用按键触发中断进行LED
    的头像 发表于 07-06 14:31 1043次阅读
    <b class='flag-5'>STM32</b>F407 <b class='flag-5'>外部</b><b class='flag-5'>中断</b>配置步骤

    STM32的IO外部中断EXTI的使用

    的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EXTI的结构,接着介绍外部中断的相关概念,对ST
    的头像 发表于 06-22 10:21 1187次阅读
    <b class='flag-5'>STM32</b>的IO<b class='flag-5'>外部</b><b class='flag-5'>中断</b>EXTI的使用

    STM32CubeMx外部中断基本使用方法

    第一步:现在STM32CubeMx 中配置所需要IO口外部中断模式。
    发表于 05-31 15:32 2850次阅读
    <b class='flag-5'>STM32</b>CubeMx<b class='flag-5'>外部</b><b class='flag-5'>中断</b>基本使用方法