1.课前知识
我们这节课的目的是按下学习板上的按钮,绿色小灯就可以亮起来,松下就可以熄灭,keysing的按键原理图:
1.1按键抖动
按键抖动的意思大概是按键在按下的瞬间有一种似断非断的状态,这个时间段很短,人是无法感知的,但是对于芯片来说是可以接收到的,在这段时间内,与按键相连的GPIO口就会收到起伏的信号,电容的作用就是消除按键抖动
1.2原理
1.2.1按键松开
按键松开PB12直接连接到3.3V电源,因此我们需要将其引脚模式设置为浮空输入,浮空输入模式下的GPIO口内部处于高阻态,即内部是有一个很大的电阻:
1.2.2按键按下
PB12这里读取到的是GND低电平0V
1.2.3上拉电路与下拉电路
1.2.4简单理解
可以发现keysing的原理图是上拉电路,因此按键松开引脚读取到高电平,按键按下按下读取到的是低电平
2.开整项目
2.1创建一个名为key的STM32项目
略,具体可以查看本专栏第一篇文章部分,包括后面步骤会省略挺多,因为在第一篇文章中已经介绍过后面就不再详细介绍
2.2设置引脚为GPIO_OUTPUT
设置用户标签:
将PB12设置为GPIO_INPUT并且设置用户标签KEY1
保存生成代码
2.3书写代码
tisp:在CubeMX中使用
Ctrl+鼠标左键单击函数的时候我们可以直接跳转到这个函数的定义
// 第一个参数是引脚分组,我们使用用户标签来写,这句代码的意思是读取KEY1所代表的GPIO口的当前电平状态
// 通过递归查看函数的返回值可以看出返回高电平是GPIO_PIN_SET,低电平是GPIO_PIN_RESET,和上一集我们学习到的是一样的
HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET){
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
}else{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
}
注意书写位置:
2.4编译运行
配置生成bin文件,具体步骤在第一篇中说过,这里不再赘述
2.5仿真
如果这里还有看不懂得还是需要回到第一篇文章理解基础
1.找到Push Buttons
配置按钮:
最终成果(按下就是熄灭,松开就是亮起,好像和一开始说的结果反了,但是已经理解了步骤就自行修改吧,提示:把RESET改成SET):
3.STM32的上拉电阻
STM32内部也是有上拉与下拉电阻的,我们接下来看看如何设置内部的上拉与下拉电阻
采用内部的上拉电阻,就可以在电路上省略掉我们自己的上拉电阻
下面我们实操一下如何使用STM32内部的上拉电阻
3.1修改PB13为GPIO_Input
设置用户标签
默认情况下PB13是浮空输入就是不上拉也不下拉,我们现在将其修改为上拉状态
保存并且生成代码
3.2书写代码
// 当读取到低电平的时候
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET){
// 软件消除按键抖动
HAL_Delay(10);
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET){
//翻转引脚电平
HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
// 循环等待
while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==GPIO_PIN_RESET){}
}
}
注意书写位置:
3.3仿真
Push Button设置
红色RGB LED设置
好了,目前就实现了轮询(while循环)进行读取按键然后反转红色小灯亮灭状态的程序了