• GD32F470引脚外部中断测试


    1)引脚初始化
    代码如下:

    int main(void)
    {
        /* systick configuration */
        systick_config();
        /* enable the led2 GPIO clock */
        rcu_periph_clock_enable(RCU_GPIOE);
        /* configure led2 GPIO port */
        gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3);
        gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
        /* reset led2 GPIO pin */
        gpio_bit_reset(GPIOE, GPIO_PIN_3);
        gd_eval_com_init(EVAL_COM0);
    	
    		//以下是GPIO外部中断操作
        /* enable the Tamper key GPIO clock */
        rcu_periph_clock_enable(RCU_GPIOC);
        rcu_periph_clock_enable(RCU_SYSCFG);
    
        gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13);
    
        /* enable and set key EXTI interrupt priority */
    		//EXTI5_9_IRQn,EXTI2_IRQn 
        nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U); //  //中断优先级配置,"EXTI10_15_IRQn"需要跟中断入口函数一致
        /* connect key EXTI line to key GPIO pin */
        syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
        /* configure key EXTI line */
        exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);
        exti_interrupt_flag_clear(EXTI_13);
        while(1) {
        }
    }
    
    

    说明如下:

    在这里插入图片描述
    2)中断函数代码如下(均测试完成):

    
    //外部中断0
    void EXTI0_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_0))
    		{
    				printf("\r\n GPIOD-0 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_0);
        }
    }
    
    //外部中断1
    void EXTI1_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_1))
    		{
    				printf("\r\n GPIOA-1 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_1);
        }
    }
    
    //外部中断2
    void EXTI2_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_2))
    		{
    				printf("\r\n GPIOI-2 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_2);
        }
    }
    
    //外部中断3
    void EXTI3_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_3))
    		{
    				printf("\r\n GPIOI-3 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_3);
        }
    }
    
    //外部中断4
    void EXTI4_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_4))
    		{
    				printf("\r\n GPIOB-4 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_4);
        }
    }
    
    //外部中断5-9
    void EXTI5_9_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_9))
    		{
    				printf("\r\n GPIOG-9 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_9);
        }
    }
    
    //外部中断10-15
    void EXTI10_15_IRQHandler(void)
    {
        if(RESET != exti_interrupt_flag_get(EXTI_13))
    		{
    				printf("\r\n GPIOC-13 \r\n");    
    				gpio_bit_toggle(GPIOE, GPIO_PIN_3);
            exti_interrupt_flag_clear(EXTI_13);
        }
    }
    
    
  • 相关阅读:
    ARM/Linux嵌入式面经(五):联想
    阿里云大数据开发三面面经,已过,面试题已配答案
    面试算法 打家劫舍 (1) 算法:递归,迭代动态规划
    【前端】伪元素的postion:absolute是对哪里的?
    LoRA: 大模型的低秩适配
    【进阶C语言】数组笔试题解析
    抛砖系列之redis监控命令
    Datax3.0+DataX-Web打造分布式可视化ETL系统
    亚像素边缘提取的例子
    条件期望:Conditional Expectation 举例详解之入门之入门之草履虫都说听懂了
  • 原文地址:https://blog.csdn.net/qq_30143193/article/details/140433548