#include <stdint.h>
#include "gd32f30x.h"
#include "led_drv.h"
static void KeyGpioInit(void)
{
// 设置GPIOA时钟
rcu_periph_clock_enable(RCU_GPIOA);
// 配置GPIO_A0
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_0);
// 设置GPIOG时钟
rcu_periph_clock_enable(RCU_GPIOG);
// 配置GPIO_A0
gpio_init(GPIOG, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_13);
gpio_init(GPIOG, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_14);
}
static void KeyExtiInit(void)
{
/*使能EXTI时钟*/
rcu_periph_clock_enable(RCU_AF);
/*IO连接到EXTI线*/
gpio_exti_source_select (GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0);
/*配置上升沿还是下降沿*/
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
/*清除标志位*/
exti_flag_clear(EXTI_0);
/*使能中断*/
nvic_irq_enable(EXTI0_IRQn, 1, 1);
/*IO连接到EXTI线*/
gpio_exti_source_select (GPIO_PORT_SOURCE_GPIOG, GPIO_PIN_SOURCE_13);
/*配置上升沿还是下降沿*/
exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
/*清除标志位*/
exti_flag_clear(EXTI_13);
/*IO连接到EXTI线*/
gpio_exti_source_select (GPIO_PORT_SOURCE_GPIOG, GPIO_PIN_SOURCE_14);
/*配置上升沿还是下降沿*/
exti_init(EXTI_14, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
/*清除标志位*/
exti_flag_clear(EXTI_14);
/*使能中断*/
nvic_irq_enable(EXTI10_15_IRQn, 1, 0);
}
/*按键初始化*/
void KeyDrvInit(void)
{
KeyGpioInit();
KeyExtiInit();
}
/*EXTI0中断服务函数,对应PA0*/
void EXTI0_IRQHandler(void)
{
if(SET == exti_interrupt_flag_get(EXTI_0))
{
ToggleLed(LED1);
exti_interrupt_flag_clear(EXTI_0);
}
}
/*EXTI10_15中断服务函数,对应PG13和PG14*/
void EXTI10_15_IRQHandler(void)
{
if(SET == exti_interrupt_flag_get(EXTI_13))
{
ToggleLed(LED2);
exti_interrupt_flag_clear(EXTI_13);
}
if(SET == exti_interrupt_flag_get(EXTI_14))
{
ToggleLed(LED3);
exti_interrupt_flag_clear(EXTI_14);
}
}
GD32进行外部中断
于 2024-05-27 22:27:18 首次发布