【零基础学STM32】CubeMx+HAL配置按键点灯实验

这篇博客介绍了如何使用STM32CubeMx和HAL库配置按键点灯实验,包括普通功能实现和模块化设计。作者详细讲解了从配置流程到代码优化,以及在遇到按键抖动问题时的解决方案,通过添加软件消抖避免了小灯的频闪。此外,还探讨了将功能封装为函数以提高代码可读性和可移植性的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容

上一篇文章中采用了EXTI中断的方式控制小灯的亮灭。其实也可以不采用中断,直接使用GPIO配置即可实现按键对应小灯的状态,且效果几乎相同。同样本次例程试验采用正点原子阿波罗STM32F429IGT6开发板,debug采用STLink(后续的文章中将不再赘述)。
试验的主要内容有:
1.正常的配置流程
2.修改代码实现对功能的优化和模块化设计

cubemx配置

按照相同的步骤,选择芯片,配置时钟树,小灯和按键的配置都和上节相同,不再赘述。
(需要注意的是,延时的操作不可避免的要使用HAL_Delay()函数,故在SYS处Debug勾选Serial Wire确保延时函数的正确使用。同时注意延时函数的优先级,本节例程暂时不会有冲突,但后续的会有,错误的优先级会导致程序卡死,后续再强调)在这里插入图片描述

代码部分

1.普通功能

初始化配置已经在cubemx基本完成,我们的思路是检测按键的电平状态,通过GPIO反转函数令小灯的电平翻转,实现亮灭
主体函数如下所示

while (1)
  {
	  if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3) == GPIO_PIN_RESET)
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);

	  if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3) == GPIO_PIN_SET)
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);	
	  
	  if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2) == GPIO_PIN_RESET)
		  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
	  
	  if(HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2) == GPIO_PIN_SET)
		  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
 }

通过上电发现,并没有很好地实现功能,按键按下两个灯闪烁不定,此时考虑到没有对按键进行消抖处理。
按键消抖:由于采用的是机械按键,在按下瞬间的电平变化并不是理想的阶跃信号,具体的变化大致如图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值