本次实现 STM32 双按键控制单个 LED 亮灭功能:
我这边板子的 PA1接led,PA0接按键1,PC13接按键2,在写的时候看自己板子的原理图,板子不一样,直接搬运肯定是不行的
- 配置 PA0、PC13 为上拉输入模式作为按键检测引脚;
- 配置 PA1 为推挽输出模式控制 LED;
- 上电默认 LED 熄灭;
- 按下 PA0 按键点亮 LED;
- 按下 PC13 按键熄灭 LED;
- 采用标准库 GPIO 初始化方式,模块化分 led、key 驱动文件。
main.c
// 引入STM32底层库文件
#include "stm32f10x.h"
// 工程自带主头文件
#include "main.h"
// 引入LED初始化函数声明
#include "led.h"
// 引入按键初始化函数声明
#include "key.h"
// 程序入口函数
int main()
{
// 初始化LED引脚PA1
LED_Init();
// 初始化按键PA0、PC13
Key_Init();
// 上电默认让PA1输出高电平,LED初始熄灭
GPIO_SetBits(GPIOA, GPIO_Pin_1);
// 死循环,一直检测按键
while(1)
{
// 读取PA0电平,等于0说明按键按下
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
{
// PA1拉低电平,点亮LED
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
// 读取PC13电平,等于0说明按键按下
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
{
// PA1拉高电平,熄灭LED
GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
}
}
key.c
// 引入按键头文件
#include "key.h"
// 引入STM32底层库
#include "stm32f10x.h"
// 按键初始化函数
void Key_Init(void)
{
// 定义GPIO初始化结构体
GPIO_InitTypeDef key_initstruct;
// 开启GPIOA、GPIOC外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
// 选择要配置的引脚PA0
key_initstruct.GPIO_Pin = GPIO_Pin_0;
// 设置为上拉输入模式
key_initstruct.GPIO_Mode = GPIO_Mode_IPU;
// 把配置写入GPIOA端口
GPIO_Init(GPIOA, &key_initstruct);
// 选择要配置的引脚PC13
key_initstruct.GPIO_Pin = GPIO_Pin_13;
// 设置为上拉输入模式
key_initstruct.GPIO_Mode = GPIO_Mode_IPU;
// 把配置写入GPIOC端口
GPIO_Init(GPIOC, &key_initstruct);
}
key.h
// 声明按键初始化函数,供外部调用
void Key_Init(void);
led驱动文件参考前面的博客