stm32第五天按键的基础知识
一:按键连接示意图
按键控制LED灯
软件设计流程
· 初始化系统
o 初始化GPIO外设时钟
o 初始化按键和LED的引脚
• 检测按键输入电平来控制LED灯
o SW2控制灯开
。 SW3控制灯关
1:key.c工程
#include"key.h"
#include"stm32f10x.h"
void Key_Init(void)//按键的初始化函数
{
//有两个步骤1:初始化按键外设 2:初始化按键时钟
GPIO_InitTypeDef Key_Initstruct;//初始化按键结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE );//打开APB2总线下GPIOA和GPIOC的时钟
Key_Initstruct.GPIO_Pin=GPIO_Pin_0;//初始化A0引脚
Key_Initstruct.GPIO_Mode=GPIO_Mode_IPU;//初始化A0为上拉输入模式,因为上拉模式默认为高电平,按下开关会变为低电平
GPIO_Init(GPIOA,&Key_Initstruct);//初始化A0的结构体
Key_Initstruct.GPIO_Pin=GPIO_Pin_13;//初始化C13引脚
Key_Initstruct.GPIO_Mode=GPIO_Mode_IPU;//初始化C13为上拉输入模式
GPIO_Init(GPIOC,&Key_Initstruct);//初始化C13的结构体
}
2:key.h工程
void Key_Init(void);//声明函数
3:主函数main.c工程
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "Bear.h"
#include "key.h"
void delay(uint16_t time)//延时1ms 软件延时粗延时
{
uint16_t i=0;
while(time --)
{
i=12000;
while(i --);
}
}
int main()
{
LED_Init();
Bear_Init();//初始化蜂鸣器的引脚GPIO A3
Key_Init();//初始化按键的时钟和引脚配置
GPIO_SetBits(GPIOA, GPIO_Pin_1); //初始化灯为灭
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0)//如果按键SW2 PA0等于0就是按下按键
{
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//A1输出低电平,灯亮
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)==0)//如果按键SW3 PC13等于0就是按下按键
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);//A1输出高电平,灯灭
}
}
}