#include "gd32vf103.h"
#include "systick.h"
#include <stdio.h>
void LED_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOC);//使能GPIOC時鐘
gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);//PC13--推輓輸出--速度50MHZ
gpio_bit_write(GPIOC, GPIO_PIN_13, 1);//PC13輸出高電平,LED滅
}
void Reversal_leve(void)
{
gpio_bit_write(GPIOC, GPIO_PIN_13, (1-gpio_output_bit_get(GPIOC, GPIO_PIN_13)));//反轉電平
}
void EXTI0_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA時鐘
rcu_periph_clock_enable(RCU_AF);
gpio_init(GPIOA, GPIO_MODE_IPD, GPIO_OSPEED_50MHZ, GPIO_PIN_0);//PA0--下拉輸入模式--速度50HMZ
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA,GPIO_PIN_SOURCE_0);
eclic_global_interrupt_enable();//使能全局中斷
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL3_PRIO1);//分組
eclic_irq_enable(EXTI0_IRQn, 1, 1);//使能中斷請求--設置優先級
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_RISING);//外部中斷0初始化--中斷模式--上升沿觸發
exti_interrupt_enable(EXTI_0);//使能外部中斷0
exti_interrupt_flag_clear(EXTI_0);//清除外部中斷0標誌位
}
int main(void)
{
LED_Init();
EXTI0_Init();
while(1)
{
}
}
void EXTI0_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(EXTI_0))//判斷外部中斷0標誌位
{
exti_interrupt_flag_clear(EXTI_0);//清除外部中斷0標誌位
Reversal_leve();
}
}
實驗效果:PA0從低電平轉換爲高電平,LED狀態變化一次。