硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2403|回复: 4
收起左侧

【问】STM429 外部中断 不停进中断函数

[复制链接]

36

主题

149

回帖

262

积分

高级会员

积分
262
发表于 2020-4-8 09:38:24 | 显示全部楼层 |阅读模式
代码是参数V6的例程,输入口设为上拉。
不停进入中断函数像死机一样
仿真发现不进入if(EXTI_GetITStatus(MAX_EXTI_LINE) != RESET)下面的语句。
不像外部触发。大家遇到过吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-4-8 10:03:23 | 显示全部楼层
这个问题我们是不是在群里交流过,有点印象。

不停的进入应该是没有清除中断标志导致的,也就是你的清除标志函数应该是在if(EXTI_GetITStatus(MAX_EXTI_LINE) != RESET)里面执行的。

这个是我SD卡插拔检测时整的配置代码,你看看是否有所不同的地方:

  1. void SD_Link_EXTIConfig(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         EXTI_InitTypeDef EXTI_InitStructure;
  5.         NVIC_InitTypeDef NVIC_InitStructure;

  6.         /* 安富莱STM32-V6开发板使用PE2作为中断输入口, 下降沿表示中断信号
  7.            未插入SD卡的时,PE2引脚是高电平,插入后,PE2引脚是低电平。
  8.         */
  9.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  11.         /* 配置中断引脚是输入 */
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  13.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  14.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  16.         GPIO_Init(GPIOE, &GPIO_InitStructure);

  17.         /* 配置外部中断线连接到相应引脚 */
  18.         SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);

  19.         /* 配置外部中断线 */
  20.         EXTI_InitStructure.EXTI_Line = EXTI_Line2;
  21.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  22.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
  23.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  24.         EXTI_Init(&EXTI_InitStructure);

  25.         /* 使能中断通道 */
  26.         NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  27.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  28.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  29.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  30.         NVIC_Init(&NVIC_InitStructure);
  31. }

  32. /*--------------------------- EXTI2_IRQHandler ---------------------------------------*/
  33. void EXTI2_IRQHandler(void)
  34. {
  35.         if (EXTI_GetITStatus(EXTI_Line2) != RESET)
  36.         {
  37.                 EXTI->IMR&=~(1<<2);         /* 关闭中断 */
  38.                 if(HandlePinDetectStart)
  39.                 {
  40.                         isr_evt_set(SDDetectBIT_0, HandlePinDetectStart);
  41.                 }
  42.                
  43.                 /* 清中断挂起位 */
  44.                 EXTI_ClearITPendingBit(EXTI_Line2);
  45.         }
  46. }
复制代码
回复

使用道具 举报

36

主题

149

回帖

262

积分

高级会员

积分
262
 楼主| 发表于 2020-4-8 10:14:03 | 显示全部楼层
问题是:不进入执行if(EXTI_GetITStatus(MAX_EXTI_LINE) != RESET)里面的清除标志函数
回复

使用道具 举报

36

主题

149

回帖

262

积分

高级会员

积分
262
 楼主| 发表于 2020-4-8 10:15:36 | 显示全部楼层
我再检查一下我代码
回复

使用道具 举报

36

主题

149

回帖

262

积分

高级会员

积分
262
 楼主| 发表于 2020-4-8 10:50:47 | 显示全部楼层
确实如硬件所说,没清除中断,定义宏搞错了。解决了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 03:06 , Processed in 0.039006 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表