
按键扫描的基本原理 按键信号的识别:一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。接上拉电阻时在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平;接下拉电阻时在没有按键按下的时候,输入引脚为低电平,当有按键按下,输入引脚则为高电平。 通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。 为什么去抖动:按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。 如何去抖动:首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。 HAL库中关于GPIO的3个重要函数 电平输出函数 void HAL_GPIO_WritePin( GPIO_TypeDef* GPIOx, uint16_t GPIo_Pin, GPIO_PinState PinState); 电平翻转函数 void HAL_GPIO_TogglePin( GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin); 电平输入函数 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPlOx,uint16_t GPIO_Pin); 如:判断PC13引脚的输入信号,若为高电平,则将PB9引脚控制的LED灯的开关状态切换。
按键控制实验设计 使用图形化的配置工具CubeMX进行硬件配置 首先新建一个项目 ![]() 选择芯片 ![]() 进入以下引脚界面,开始配置工作 ![]() 引脚配置 PB8和PB9为output模式,PC13和PB1为input模式 ![]() 系统配置,选择SWD接口的仿真器,Debug中选择Serial Wire ![]() 选择使用外部晶振 ![]() 将PB1和PC13设置为上拉模式 ![]() 在时钟树中配置 ![]() 生成代码 ![]() ![]() 使用Keil打开生成的代码进行编辑 打开文件 ![]() 代码编写 在/* USER CODE BEGIN WHILE */与/* USER CODE END WHILE */中while循环下编写
编译代码 ![]() Proteus中仿真 新建工程 ![]() 工程向导 一直选择默认,在Firmware中按照以下配置,最后单击完成 ![]() 注意:应当尽量使CubeMX中选择的开发板与仿真时选择的开发板一致 仿真电路图搭建 ![]() 其中接地线在 ![]() 搭建完毕后双击开发板,引入编译代码后产生的hex文件 ![]() 点击左下角开始模拟 未按按键时,灯为亮的状态 ![]() 按一次按键后,灯熄灭 ![]() ———————————————— 版权声明:m0_56450064 |
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南