野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 102|回复: 1

exti中断,下载程序时,Key2会触发一次EXTI中断,为什么?

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
程序用的配套代码。。  如题,在下载程序时,PC13(Key2)这个按键会进入一次中断,下载程序后Key2的灯是亮的。但是复位或重新上电,状态却又是正常的。示波器看PC13的电平触发,是没有变化的,这是为什么?

下载程序后的状态

下载程序后的状态
回复

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层
我想我找到了问题的答案。
我出现的问题是,在下载程序时,会进入一次Key2(PC13)EXTI13中断,我的开发板是霸道V2,展示出来的效果是在下载完成后,绿灯是亮着的状态(意味着EXTI13中断了一次,事实也是如此)。我用示波器看PC13引脚电平变化,全程无跳变,因此排除PC13引起的触发。我发现PA13在在下载程序时是有电平变化的(JTAG),这时我就在想是不是因为PA13引脚导致的中断触发(事实确实是PA13引起的),EXTI13是由AFIO的AFIO_EXTICR4寄存器控制,而这个寄存器的默认值是设置为PA13。课程代码先开启了AFIO时钟,导致PA13最开始是有效的,恰好此时PA13在下载程序时,电平有变化,因此出现错误。解决办法是:等待EXTI中断都配置完成,最后打开AFIO时钟!!!
  1. void EXTI_Key_Config(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         EXTI_InitTypeDef EXTI_InitStructure;
  5.         /*开启按键GPIO口的时钟*/
  6.         RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);
  7.         RCC_APB2PeriphClockCmd(KEY2_INT_GPIO_CLK,ENABLE);
  8.                                                                                                
  9.         /* 配置 NVIC 中断*/
  10.         NVIC_Configuration();
  11.        
  12.         /*--------------------------KEY1配置-----------------------------*/
  13.         /* 选择按键用到的GPIO */       
  14.         GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
  15.         /* 配置为浮空输入 */       
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  17.         GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);

  18.         /* 选择EXTI的信号源 */
  19.         GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);
  20.         EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;

  21.         /* EXTI为中断模式 */
  22.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  23.         /* 上升沿中断 */
  24.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  25.         /* 使能中断 */       
  26.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  27.         EXTI_Init(&EXTI_InitStructure);
  28.        
  29.         /*--------------------------KEY2配置-----------------------------*/
  30.         /* 选择按键用到的GPIO */       
  31.         GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
  32.         /* 配置为浮空输入 */       
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  34.         GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);

  35.         /* 选择EXTI的信号源 */
  36.         GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);

  37.         EXTI_InitStructure.EXTI_Line = KEY2_INT_EXTI_LINE;

  38.         /* EXTI为中断模式 */
  39.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  40.         /* 下降沿中断 */
  41.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  42.         /* 使能中断 */       
  43.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  44.         EXTI_Init(&EXTI_InitStructure);
  45.        
  46.        
  47.        
  48.         /*等待EXTI中断都配置完成,最后打开AFIO时钟*/
  49.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  50. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-11 06:35 , Processed in 0.119042 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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