野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 31065|回复: 4

学exit时问一下为什么pa0正常而pc13没反应

[复制链接]
发表于 2020-12-15 18:36:48 | 显示全部楼层 |阅读模式
10火花
本帖最后由 zhouminrui 于 2020-12-16 15:53 编辑

配置中断优先级
static void Nvic_config(){
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
   
    NVIC_InitTypeDef NVIC_Initstruct;
    NVIC_Initstruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_Initstruct.NVIC_IRQChannelSubPriority =1;
    NVIC_Initstruct.NVIC_IRQChannelSubPriority =1;
    NVIC_Initstruct.NVIC_IRQChannelCmd = ENABLE;
   
   
    NVIC_Init(&NVIC_Initstruct);
    NVIC_Initstruct.NVIC_IRQChannel =  EXTI15_10_IRQn;

    NVIC_Init(&NVIC_Initstruct);
}
void Exti_config(){
//配置NVIC
   
    Nvic_config();
    //RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
    //开启GPIOA,GPIOB时钟
   
   
    GPIO_InitTypeDef GPIOA_pin0,GPIOC_pin13;
    GPIOA_pin0.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIOA_pin0.GPIO_Pin = GPIO_Pin_0;
   
    GPIOC_pin13.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIOC_pin13.GPIO_Pin = GPIO_Pin_13;
   
    GPIO_Init(GPIOA,&GPIOA_pin0);
    GPIO_Init(GPIOC,&GPIOC_pin13);//初始化GPIOA的PIN0,GPIOC的pin13引脚
   
   
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);
    //配置
   
   
   
    //配置EXTI
        EXTI_InitTypeDef PIN0_initstruct,PIN13_initstruct;
        PIN0_initstruct.EXTI_Line = EXTI_Line0;
        PIN0_initstruct.EXTI_Mode=EXTI_Mode_Interrupt;
        PIN0_initstruct.EXTI_LineCmd = ENABLE;
        PIN0_initstruct.EXTI_Trigger = EXTI_Trigger_Rising;
   
   
        PIN13_initstruct.EXTI_Line = EXTI_Line13;
        PIN13_initstruct.EXTI_Mode=EXTI_Mode_Interrupt;
        PIN13_initstruct.EXTI_LineCmd = ENABLE;
        PIN13_initstruct.EXTI_Trigger = EXTI_Trigger_Rising;
        
        EXTI_Init(&PIN0_initstruct);
        EXTI_Init(&PIN13_initstruct);


}exti配置


中断服务函数
void EXTI0_IRQHandler(void){
        
    if(EXTI_GetITStatus(EXTI_Line0) !=RESET){
                LED_open(0);开启绿灯
               
                EXTI_ClearITPendingBit(EXTI_Line0);
            }
            

}



void EXTI15_10_IRQHandler(void){
            
      if(EXTI_GetITStatus(EXTI_Line13) !=RESET){
            
            LED_open(1);//开启蓝灯
            
            EXTI_ClearITPendingBit(EXTI_Line13);
        }
            
}

主函数
int main(void)
{
   
    LED_config();//配置GPIOB
    Exti_config();//配置中断
    while(1){

    }
}

用的时f103指南者

当我考录好编译好的程序时,程序直接执行EXTI15_10_IRQHandler(),蓝灯打开,重启后蓝灯不打开,按key2时蓝灯不亮没反应,按key1时绿灯正常亮。这是为什么?

https://www.firebbs.cn/forum.php?mod=attachment&aid=MjkxODN8NGY4MmRhMWFiN2VjZDJkMDk0ZDhiYjY2YzRhMjgyMmV8MTcxNzMzOTcxMw%3D%3D&request=yes&_f=.zip

GPIO中断输入.zip

5.55 MB, 下载次数: 2

回复

使用道具 举报

发表于 2020-12-16 08:54:00 | 显示全部楼层
估计只有C13可以,你在调用GPIO_Init初始化引脚的时候应该在赋值完结构图就调用一个GPIO_Init。像你上面写的GPIOA_pin0.GPIO_Pin = GPIO_Pin_0;,但是下面又有GPIOC_pin13.GPIO_Pin = GPIO_Pin_13;,结构体成员GPIO_Pin会从GPIO_Pin_0变成GPIO_Pin_13,所以你压根没有初始化到A0
回复

使用道具 举报

发表于 2020-12-16 10:47:44 | 显示全部楼层
LED_open(1);//开启蓝灯
回复

使用道具 举报

 楼主| 发表于 2020-12-16 15:47:33 | 显示全部楼层
还有梦与你 发表于 2020-12-16 08:54
估计只有C13可以,你在调用GPIO_Init初始化引脚的时候应该在赋值完结构图就调用一个GPIO_Init。像你上面写 ...

GPIO_InitTypeDef GPIOA_pin0,GPIOC_pin13;

我不是声明了两个不同的GPIO_InitTypeDef结构体GPIOA_pin0、GPIOC_pin13
回复

使用道具 举报

 楼主| 发表于 2020-12-16 16:29:34 | 显示全部楼层
我知道了,应该打开afio的时钟
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 22:48 , Processed in 0.036670 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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