GPIO_EXTILineConfig的用法

刚刚开始学习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一致,为同一个口?


回答:

刚刚测试了一下,GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);这话可以去掉,写与不写都一样,但是换成GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);你就进不去中断了,,,,,,所以原因我推测:A0对EXTI0是默认的,可以去查手册上相关寄存器的默认值,你要是用B0口做中断的话,就不行,,,,,至于A0设为输入可以去掉,可能也是因为默认设为输入的关系,严格的说,去掉可行但是不严谨。
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值