stm32按键灵敏度问题

第一步:首先检查自己的硬件原理图,一定要确定自己的按键到底需要接上拉电阻还是下拉电阻。我的板子原理图如下,wk_up需要接下拉电阻,固定在低电平使其通路。KEY0与KEY1则需要接上拉电阻,固定在高电平使其通路。

上拉电阻:将一个不确定的信号(高或低电平),通过一个电阻与电源VCC相连,固定在高电平。

下拉电阻:将一个不确定的信号(高或低电平),通过一个电阻与地GND相连,固定在低电平。

上、下拉电阻的作用:

一般说法是上拉增大电流,下拉电阻是用来吸收电流。

1、当 TTL 电路驱动 CMOS 电路时,如果电路输出的高电平低于 CMOS 电路的最低高电平 (一般为 3.5V), 这时就需要在 TTL 的输出端接上拉电阻,以提高输出高电平的值。
2、OC 门电路必须使用上拉电阻,以提高输出的高电平值。
3、为增强输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。
4、在 CMOS 芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻以降低输入阻抗, 提供泄荷通路。
5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限,增强抗干 扰能力。
6、提高总线的抗电磁干扰能力,管脚悬空就比较容易接受外界的电磁干扰。
7、长线传输中电阻不匹配容易引起反射波干扰,加上、下拉电阻是电阻匹配,有效的抑制 反射波干扰。

按键延时消抖处理按键不灵敏问题

方法一:(不推荐,不推荐在中断中使用延时函数,当然你硬是要使用也可以看看):

HAL_Delay()分析 中断中使用HAL_Delay()这时候下载的代码,用keil单步执行不难看出,在进入回调函数之后就一直在HAL_Delay陷入了死循环中,怎么也出不来,小小的延时函数为什么会出现这种情况呢?百度一下HAL_Delay函数卡死,相关帖子层出不穷,真正说出原因并提供解决方法的几乎没有。但其实原因并不难,进来HAL_Delay函数看看就知道。

计时器的时基来源是 SysTick定时器,且在固定时间间隔内产生中断。Interrupt这一词是问题的关键,既然是中断,势必就有优先级,如果在中断里面HAL_Delay会卡死,而main函数则不会,那么有没有可能是Systick优先级太低造成的呢。带着这个问题我们回到STM32CubeMX中重新找到NVIC。

这时候我们注意到在默认使能的中断里面有一个System tick的中断,这就是给HAL_Delay函数提供时基的定时器中断了。显然,这个中断的抢占优先级和外部中断的抢占优先级是一样的,那么在外部中断触发时肯定不能接着触发systick中断了,问题已经找到,只需要简单地将外部中断的抢占优先级改低即可。

方法二:(推荐)

在进入中断时候进行相应的中断线失能,结束相应的中断函数操作后,再中断使能。

示例:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

HAL_NVIC_DisableIRQ(EXTI3_IRQn);

HAL_NVIC_DisableIRQ(EXTI4_IRQn);

switch(GPIO_Pin )

{

case KEY1_Pin :

  HAL_GPIO_TogglePin (LED1_GPIO_Port,LED1_Pin  );break ;

case KEY2_Pin :

  HAL_GPIO_TogglePin (LED2_GPIO_Port,LED2_Pin  );break;

}

HAL_NVIC_EnableIRQ(EXTI3_IRQn);

HAL_NVIC_EnableIRQ(EXTI4_IRQn);

}

  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值