出现的问题:GD32F30x中断问题:进行初始化NVIV中断控制器时。固件库函数NVIC_irq_enable()输入的第一参数即中断源:EXTI10_15_IRQn问题。设置后不能进行中断。
背景:使用KEY2按键PC13按下中断,使得LED灯1打开。 KEY2初始化函数: KEY1初始化函数: void key_goio_configer() { rcu_periph_clock_enable(RCU_GPIOC);/*使能外设时钟*/ gpio_init(GPIOC,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_50MHZ,GPIO_PIN_13);//GPIO_A_0初始化,且设置为浮空输入 } LED1初始化函数: void led_goio_configer() { rcu_periph_clock_enable(RCU_GPIOC);/*使能外设时钟*/ gpio_init(GPIOC,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_2);//GPIO_C_0初始化,且设置为推挽输出 } NVIC设置函数 static void NVIC_Configer(void) ////配置中断优先级NVIC嵌入式矢量型中断控制寄存器-进行中断的优先级设置 { nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);//设置优先级组 nvic_irq_enable(EXTI10_15_IRQn,0,0); //进行NVIC中断控制器使能 }
按键KEY1中断函数
void key_led_configer(void) //配置按键KEY_1(PA0)为中断 { key_goio_configer();//初始化KEY1PA0 rcu_periph_clock_enable(RCU_AF); //使能AF复用功能外设时钟 NVIC_Configer(); //配置中断优先级NVIC嵌入式矢量型中断控制寄存器-进行中断的优先级设置 gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOC,GPIO_PIN_SOURCE_13); //选择GPIO-A的源头作为中断源 exti_init(EXTI_13,EXTI_INTERRUPT,EXTI_TRIG_FALLING); //初始化中断函数,配置EXTI线为0(与设置中断的优先级位置对应),设置为下降沿触发中断 exti_event_enable(EXTI_13); //使能中段 }
中断服务函数
void EXTI0_IRQHandler(void) { if(exti_flag_get(EXTI_13)!=RESET) { led_goio_configer(); gpio_bit_set(GPIOC,GPIO_PIN_2);
} exti_interrupt_flag_clear(EXTI_13);
}
|