GD32F303固件库开发(6)----GPIO输入函数说明

描述

概述

本章主要讲解GPIO输入检测。

硬件准备

这里准备了2块开发板进行验证,分别是GD32303C_START开发板。 固件库

样品申请

https://www.wjx.top/vm/wFGhGPF.aspx#

管脚配置

在GD32303C_START开发板中,按键的管脚为PA0。 固件库

LED管脚如下所示。 固件库

对GPIO管脚进行初始化配置。

/* 使能GPIOB时钟*/
    rcu_periph_clock_enable(RCU_GPIOB);

    /*设置PB14、PB15为推挽输出 */
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);

    /* 设置PB14、PB15为输出为0*/
    gpio_bit_reset(GPIOB, GPIO_PIN_14);    
        gpio_bit_reset(GPIOB, GPIO_PIN_15);    



        /* 使能GPIOB时钟*/
    rcu_periph_clock_enable(RCU_GPIOA);    
        /*设置PA0为浮空输入 */
        gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);

gpio_input_bit_get()函数

读取指定的GPIO管脚电平状态。 固件库

例如按下按键LED1灭LE2亮,松开按键LED1亮LE2灭。

while(1){

             if(SET == gpio_input_bit_get(GPIOA, GPIO_PIN_0))//按下LED1灭LE2亮
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,SET);
                    gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);

             }
                else//松开LED1亮LE2灭
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);
                    gpio_bit_write(GPIOB, GPIO_PIN_14,SET);

             }
        delay_1ms(10);
    }

gpio_input_port_get()函数

读取整个GPIO的电平状态。 固件库 例如按下按键LED1灭LED2亮,松开按键LED1亮LE2灭。

while(1){
                uint16_t get_gpioa_num = 0;
                get_gpioa_num=gpio_input_port_get(GPIOA);
                if(get_gpioa_num & 0x0001)//按下LED1灭LE2亮
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,SET);
                    gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);
             }
                else//松开LED1亮LE2灭
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);
                    gpio_bit_write(GPIOB, GPIO_PIN_14,SET); 
             }                                
        delay_1ms(10);
    }

gpio_output_bit_get()函数

读取输出管脚电平状态。 固件库

例如按下按键LED2亮,如果LED1是亮的,那么切换为灭的状态,如果为灭切换为亮状态。 设置断点查看会更加准确。

while(1){
                uint16_t get_gpioa_num = 0;
                get_gpioa_num=gpio_input_port_get(GPIOA);
                if(get_gpioa_num & 0x0001)//按下LED1灭LE2亮
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,SET);

                 if(gpio_output_bit_get(GPIOB, GPIO_PIN_14)==SET)//如果灯亮,则灯灭
                    gpio_bit_write(GPIOB, GPIO_PIN_14,RESET);
                 else//如果灯灭,则灯亮
                    gpio_bit_write(GPIOB, GPIO_PIN_14,SET); 
             }
                else//松开LED1亮LE2灭
             {
                    gpio_bit_write(GPIOB, GPIO_PIN_15,RESET);

             }                                
        delay_1ms(10);
    }
}

gpio_output_port_get()函数

读取全部GPIO管脚输出电平状态。 固件库

审核编辑 黄昊宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
记帖MCU 2022-11-29
0 回复 举报
交流ⓆU_N:6_15061293 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分