效果:
开关控制灯的亮灭
目录
[5. 完整代码](#5. 完整代码)
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相同