GPIO的使用--操作PE02 PE03 PE04实现开关控制灯泡亮灭

效果:

开关控制灯的亮灭

目录

1.找到引脚组别(DEFG)

led灯硬件结构

开关硬件结构

2.时钟使能

3.GPIO时钟控制

4.控制实现思路

[5. 完整代码](#5. 完整代码)

6.视频演示


1.找到引脚组别(DEFG)

开关的引脚组别--E;LED灯的引脚组别--F

led灯硬件结构
开关硬件结构

2.时钟使能

cpp 复制代码
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);          //LED
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);          //KEY

3.GPIO时钟控制

cpp 复制代码
//LED--GPIO参数配置
    GPIO_InitTypeDef led_gpio;                   //定义变量
    led_gpio.GPIO_Mode = GPIO_Mode_OUT;          //引脚以输出方式工作
    led_gpio.GPIO_OType = GPIO_OType_PP;         //推挽
    led_gpio.GPIO_Pin = GPIO_Pin_10;
    led_gpio.GPIO_Speed=GPIO_High_Speed;         //gpio的反应速率,不太影响
    led_gpio.GPIO_PuPd=GPIO_PuPd_UP;             //上拉  GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL    
    GPIO_Init(GPIOF,&led_gpio);                  //初始化变量
cpp 复制代码
//KEY--GPIO参数配置
    GPIO_InitTypeDef key_gpio;                  //定义变量
    key_gpio.GPIO_Mode = GPIO_Mode_IN;          //引脚以输入方式工作
    key_gpio.GPIO_OType = GPIO_OType_PP;        //推挽
    key_gpio.GPIO_Pin =  GPIO_Pin_4;            //第几根引脚
    key_gpio.GPIO_Speed=GPIO_High_Speed;        //gpio的反应速率,不太影响
    key_gpio.GPIO_PuPd=GPIO_PuPd_UP;            //上拉  //取决于所调用的结构
    GPIO_Init(GPIOE,&key_gpio);                 //初始化

4.控制实现思路

cpp 复制代码
while(1)                   //大循环体,保证一直在运行,被控制
    {
        key0= GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);   //默认高电平,按下,接地
        if(key0==1)
        {
            GPIO_WriteBit(GPIOF, GPIO_Pin_10,1);         //led高电平,灯灭
        }
        else
        {
            GPIO_WriteBit(GPIOF, GPIO_Pin_10,0);         //led高电平,灯亮
        }    
    }

5. 完整代码

cpp 复制代码
#include "stm32f4xx.h"                  // Device header

int main()
{
	//时钟使能--LED
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	
	//GPIO时钟控制  //参数配置
	//让程序决定第几组第几根引脚,如何工作
	GPIO_InitTypeDef led_gpio;
	led_gpio.GPIO_Mode = GPIO_Mode_OUT;    //引脚以输出方式工作
	led_gpio.GPIO_OType = GPIO_OType_PP;	 //推挽
	led_gpio.GPIO_Pin =  GPIO_Pin_9| GPIO_Pin_10 |GPIO_Pin_8;
	led_gpio.GPIO_Speed=GPIO_High_Speed;      //gpio的反应速率,不太影响
	led_gpio.GPIO_PuPd=GPIO_PuPd_DOWN;          //上拉  GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL
	
	GPIO_Init(GPIOF,&led_gpio);
	GPIO_SetBits(GPIOF, GPIO_Pin_9);
	GPIO_SetBits(GPIOF, GPIO_Pin_10);
	
	uint16_t key0=0;
	//时钟使能--KEY开关
		RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	//GPIO时钟控制  //参数配置
	//让程序决定第几组第几根引脚,如何工作
	GPIO_InitTypeDef key_gpio;
	key_gpio.GPIO_Mode = GPIO_Mode_IN;        //引脚以输入方式工作
	key_gpio.GPIO_OType = GPIO_OType_PP;	    //推挽
	key_gpio.GPIO_Pin =  GPIO_Pin_4| GPIO_Pin_3 |GPIO_Pin_2;//第几根引脚
	key_gpio.GPIO_Speed=GPIO_High_Speed;      //gpio的反应速率,不太影响
	key_gpio.GPIO_PuPd=GPIO_PuPd_UP;          //上拉  GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL
	
	GPIO_Init(GPIOE,&key_gpio);               //初始化
	while(1)
	{
		//uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);
		key0= GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);//默认高电平,按下,接地
		if(key0==1)
		{
      GPIO_WriteBit(GPIOF, GPIO_Pin_10,1);//led高电平,灯灭
		}
		else
		{
			GPIO_WriteBit(GPIOF, GPIO_Pin_10,0);	//led高电平,灯亮
		}	
		
	}
}

6.视频演示

开关控制灯的亮灭

PE02、PE03原理与PE04相同

相关推荐
xiangw@GZ2 分钟前
SD / eMMC / SDIO 总线接口技术对比
单片机·嵌入式硬件
新晨单片机设计5 分钟前
S030D-WIFI空气净化器(温湿度、甲醛、空气质量)【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·空气净化器
知识分享小能手27 分钟前
C学习教程,从入门到精通,C语言单片机基础 — 完整知识点手册(19)
c语言·单片机·学习
笨笨饿1 小时前
#143_屏幕画撕裂的问题及解决方法
linux·stm32·单片机·嵌入式硬件·mcu·lvgl·嵌入式实时数据库
李永奉1 小时前
杰理可视化SDK开发-音频录制功能使用教程
笔记·单片机·嵌入式硬件·mcu·物联网·音视频
_YouziTech_1 小时前
【STM32+MAX98357】MP3转PCM存入Flash并控制音频输出
stm32·单片机·音视频·内存·pcm·i2s·wav
沐欣工作室_lvyiyi1 小时前
基于STM32的老人跌倒与防走失报警系统设计与实现(论文+源码)
stm32·单片机·嵌入式硬件
我叫洋洋1 小时前
Allegro 画布“垃圾显示“清理指南:把板子调成干净工作台(实战总结)
c语言·c++·单片机·嵌入式硬件·eda·嘉立创
xiangw@GZ1 小时前
SPI Flash 接口模式与 XIP 技术详解
单片机·嵌入式硬件
沐欣工作室_lvyiyi2 小时前
基于STM32的人体健康检测设计(论文+源码)
stm32·单片机·嵌入式硬件