3.5 按键基础知识
1.深入理解GPIO输入
GPIO的特点:
- 具有内部上拉或下拉的功能
- 可以使用外部下拉或上拉
按键连接示意图:
按键控制LED灯
灯的电路图:
软件设计流程:
- 初始化系统
初始化GPIO外设时钟
初始化按键和LED的引脚
- 检测按键输入电平来控制LED灯
运行代码:
key.c
#include "key.h"
#include "stm32f10x.h"
void Key_Init(void)
{
//初始化按键外设
GPIO_InitTypeDef Key_Initsturct; //初始化按键结构体
//初始化按键时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);
//打开APB2总线下GPIOA和GPIOC的时钟
Key_Initsturct.GPIO_Pin=GPIO_Pin_0; //初始化A0引脚
Key_Initsturct.GPIO_Mode=GPIO_Mode_IPU; //初始化A0为上拉输入模式
GPIO_Init(GPIOA, &Key_Initsturct); //初始化A0结构体
Key_Initsturct.GPIO_Pin =GPIO_Pin_13; //初始化C13引脚
Key_Initsturct.GPIO_Mode=GPIO_Mode_IPU; /初始化C13为上拉输入模式
GPIO_Init(GPIOC, &Key_Initsturct); //初始化C13结构体
}
key.h
void Key_Init(void); //函数声明
led.c和led.h
嵌入式STM32学习——GPIO控制之 固件库实现LED点灯-CSDN博客
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
int main()
{
//1.初始化灯和按键配置
//bear_Init();
Key_Init();
LED_Init();
GPIO_SetBits( GPIOA, GPIO_Pin_1); //初始化led为熄灭状态
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0) //如果A0口对应的SW2按键按下
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1); //A1输出低电平,led亮
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)==0) //如果C13口对应的SW3按键按下
{
GPIO_SetBits( GPIOA, GPIO_Pin_1); //C13输出高电平,led灭
}
}
}