没有调用GPIO_EXTILineConfig为什么也能进中断

2019-03-23 16:29发布

刚刚开始学习STM32,现在遇到一个问题,不明白是为什么。 我按照教程上写了一个最简单的中断程序,就是按键 然后进中断,点亮led 按键是 PA0,led是PA2 按照教程上的写法 GPIO_InitTypeDef GPIO_InitStructure;  NVIC_InitTypeDef NVIC_InitStructure;
 EXTI_InitTypeDef EXTI_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 
  PA2 设置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);   PA0设置为输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //选择输入模式为浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;          //输出频率最大50MHz
GPIO_Init(GPIOA,&GPIO_InitStructure);     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
                         
 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure);    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);  EXTI_InitStructure.EXTI_Line = EXTI_Line0; 
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
 EXTI_Init(&EXTI_InitStructure);   以上配置没有问题 进中断后能正常点亮小灯!   但是我自己试验了一下,我去掉  PA0 设置为输入这段代码,或者去掉GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);,或者两者都去掉   还是能正常点亮小灯! 这是为什么??   GPIO_EXTILineConfig这个函数的作用是什么?参数GPIO_PinSource0是不是必须和EXTI_InitStructure.EXTI_Line = EXTI_Line0一致,为同一个口?   最求高手赐教 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
hopehenjue
1楼-- · 2019-03-23 18:07
 精彩回答 2  元偷偷看……
lys520gc
2楼-- · 2019-03-23 20:50
顶一下啊 高手们 这个问题应该很简单 请不吝赐教啊~
lys520gc
3楼-- · 2019-03-23 23:36
。。。还没有人回答一下吗。。。。晕啊
lys520gc
4楼-- · 2019-03-24 01:53
 精彩回答 2  元偷偷看……
zonglili
5楼-- · 2019-03-24 05:09

中断设置时少一句话把

EXTI_GenerateSWInterrupt(EXTI_Line0);

jnj
6楼-- · 2019-03-24 09:36
刚刚测试了一下,GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);这话可以去掉,写与不写都一样,但是换成GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);你就进不去中断了,,,,,,所以原因我推测:A0对EXTI0是默认的,可以去查手册上相关寄存器的默认值,你要是用B0口做中断的话,就不行,,,,,至于A0设为输入可以去掉,可能也是因为默认设为输入的关系,严格的说,去掉可行但是不严谨。(我没有去查寄存器的默认值,只是推测,如果说的不对,欢迎指出)

一周热门 更多>