LED配置
使用推挽模式的原因在于可以输出高低电平,而输出模式在点亮LED里面其实并不重要,三种模式均可。
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin = GPIO_PIN_5; //确定引脚
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; //输出推挽模式
GPIO_Initure.Pull = GPIO_PULLUP; //使用上拉电阻
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; //使用高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
//在对应的引脚写入,输出相应的高低电平
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET); //输出高电平
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET); //输出低电平
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); //对当前电平进行取反
HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_5); //读取前电平的值
蜂鸣器配置
与LED的配置一样
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin = GPIO_PIN_8; //确定引脚
GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; //输出推挽模式
GPIO_Initure.Pull = GPIO_PULLUP; //使用上拉电阻
GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; //使用高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
按键配置
使用输入模式,得到按键此时的电平高低判断按键是否按下。
GPIO_InitTypeDef GPIO_Initure;
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; //使用输入模式是为了得到按键是否被按下
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
//按KEY0按键LED亮或者灭,KEY1按下蜂鸣器响或者灭
#define KEY0_PRES 1
#define KEY1_PRES 2
int Key_Press(void);
#define KEY0 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)
#define KEY1 HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)
//按键函数
u8 Key_Press(void){
static u8 key = 1; //判断按键是否松开
if(key==1&&((KEY0==0)||(KEY1==0))){
key = 0;
if(KEY0==0)
return KEY0_PRES;
else if(KEY1==0)
return KEY1_PRES;
}else if(KEY0==1&&KEY1==1){
key = 1;
}
return 0;
}