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

概述

本章主要讲解GPIO输入检测。需要GD样片的可以加群申请:615061293。

视频教学

https://www.bilibili.com/video/BV1pT4y1q7db/

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

csdn课程

课程更加详细。
https://download.csdn.net/course/detail/37144

硬件准备

这里准备了2块开发板进行验证,分别是GD32303C_START开发板。
在这里插入图片描述

管脚配置

在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管脚输出电平状态。
在这里插入图片描述

最后

以上的代码会在Q群里分享。QQ群:615061293。
或者关注微信公众号『记帖』,持续更新文章和学习资料,可加作者的微信交流学习!
在这里插入图片描述

posted @ 2022-05-28 22:04  记帖  阅读(940)  评论(0)    收藏  举报