stm32学习之按键输入检测

在这里插入图片描述

1.对于按键输入的检测有两种基本的情况(假设每隔100ms检测一次):
(1)一种情况是支持连续按:
什么意思呢?最典型的例子就是电视机遥控器,如果你一直按他就是一直换台或者一直增大减小音量,就是说它检测到一次低电平就认为有效从而做出反应。
(2)第二种情况是不支持连续按:
这种情况很常见,例如电源开关,只要你按下了它就会开或者关,而不是你一直按着它开关开关。
2.我们怎样实现这两种做法呢?
通过记录上一次检测到的电平情况,对这一次电平的效果做出不同反应:
支持连续按不用管上一次什么情况只要检测到低电平就会做出反应;
不支持连续按必须保证上一次是高电平,这一次的低电平才会起作用,如图:
在这里插入图片描述3.从而想到要用到static关键字:
在这里插入图片描述**注意的是:它的记忆功能!!!**例如:
在这里插入图片描述第一次调用这个函数:返回1
第二次调用这个函数:返回2
第三次调用这个函数:返回3
第四次调用这个函数:返回4

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用STM32输入捕获功能来检测按键,可以按照以下步骤进行操作: 1. 配置GPIO口为输入模式,用于连接按键的引脚。 2. 配置TIM(定时器)的一个通道为输入捕获模式,以便捕获按键引脚的状态变化。 3. 在硬件初始化函数中配置GPIO和TIM。 4. 在主循环中检测输入捕获事件并处理按键状态。 下面是一个简单的示例代码,演示如何使用STM32 HAL库来实现按键检测: ```c #include "stm32f4xx_hal.h" // 定义按键引脚 #define BUTTON_PIN GPIO_PIN_0 #define BUTTON_PORT GPIOA // 定义定时器和通道 #define TIM_HANDLE htim2 #define TIM_CHANNEL TIM_CHANNEL_1 // 按键状态变量 GPIO_PinState buttonState = GPIO_PIN_RESET; // 输入捕获回调函数 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM_HANDLE.Instance && htim->Channel == TIM_CHANNEL) { // 获取捕获值 uint32_t captureValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL); // 处理按键状态 if (captureValue > 1000) { buttonState = GPIO_PIN_SET; // 按下 } else { buttonState = GPIO_PIN_RESET; // 松开 } } } int main(void) { // STM32初始化代码 // 配置GPIO口为输入模式 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = BUTTON_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; // 或者使用GPIO_PULLDOWN HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); // 配置TIM为输入捕获模式 TIM_IC_InitTypeDef sConfigIC; sConfigIC.ICPolarity = TIM_ICPOLARITY_BOTHEDGE; // 检测上升沿和下降沿 sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; HAL_TIM_IC_ConfigChannel(&TIM_HANDLE, &sConfigIC, TIM_CHANNEL); // 启动输入捕获 HAL_TIM_IC_Start_IT(&TIM_HANDLE, TIM_CHANNEL); while (1) { // 处理按键状态 if (buttonState == GPIO_PIN_SET) { // 按键按下后的操作 } else { // 按键松开后的操作 } } } ``` 在上述示例代码中,我们首先定义了按键引脚、定时器和通道以及按键状态变量。然后在`main`函数中,我们配置了GPIO口为输入模式,并将定时器配置为输入捕获模式。在主循环中,我们通过检查按键状态来执行相应的操作。 请注意,示例代码中使用了STM32 HAL库,你需要根据自己使用的具体型号和开发环境进行相应的配置和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值