void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == htim4.Instance) { TIM4_Stop(); if(key_state & 0X2000) // 如果是700ms的超时 { // 再次检测按键如果是按下状态,那么就是长按事件,否则事件无效 if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_P...
2.1 按键结构与连接 2.2 按键操作与电平变化 2.3 电平检测与按键识别 2.4 消抖处理 三、配置步骤——轮询 四、编写程序——轮询 4.1 在main.c文件中,添加printf重定向函数,如下所示。 4.2 在while(1)循环中,添加按键处理程序,如下所示: 五、运行结果 六、使用中断模式检测按键 6.1 修改STM32CubeMX的配置 6.2...
按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了,可重读前面“GPIO框图剖析”小节, STM32 HAL库中GPIO初始化结构体GPIO_TypeDef的定义与“定义引脚模式的枚举类型”小节中讲解的相同。13.1. 硬件设计 按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子...
而while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET);语句的作用是判断按键是否已经被松开,用以消除按下按键时的抖动,以免影响检测效果。当我们检测到按键被按下,并且已经松开的时候,便会执行HAL_GPIO_TogglePin函数,上面我们讲过,这个函数的作用是翻转该引脚的电平,即高低电平互换。此处的作用是改变LE...
本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出...
单个按键和矩阵键盘扫描学习总结 入一段延时再重新检测一次电平如果电平还是0时候这时候才输出,延时则可跳过抖动部分,这样就形成了消抖,同理在按键断开的时候也要多加入一个松手语句,即多加入一个延时语句再重新进行一次松手判定来确定你按键是否 kasjd 2018-07-13 00:05:04 ...
1.main.c文件的static void MX_GPIO_Init(void)函数中,增加了__HAL_RCC_GPIOA_CLK_ENABLE();这里很好理解,因为SWD下载方式用的引脚是PA13和PA14 2.stm32f1xx_hal_msp.c文件的大概第77行左右,没有打开“Serial Wire”时,该行是__HAL_AFIO_REMAP_SWJ_DISABLE();,打开了“Serial Wire”是,该行是__HAL...
在HALLIB里面的stm32f7xx_hal.c文件中可以找到HAL_Init函数,复制过来粘到main()文件中,完成了初始化HAL库。 在SYSTEM里面的sys.c文件中找到Stm32_Clock_Init函数,复制过来粘到main()文件中,完成了初始化系统时钟。 在HALLIB里面的stm32f7xx_hal.c文件中搜索RCC_TypeDef,可以看到: ...
u8 key;HAL_Init(); //初始化HAL库Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhzdelay_init(180); //初始化延时函数LED_Init(); //初始化LEDKEY_Init(); //初始化按键构造一个死循环while(1){ key是一个返回值 switch通过判断KEY的值来选择事件 ...
延时之后再次利用 HAL_GPIO_ReadPin()函数读取输入数据,若依然为低电平,表明确实有按键被按下了。否则返回 KEY_UP,表示按键没有被按下。 循环调用HAL_GPIO_ReadPin()函数一直检测按键的电平,直至按键被释放,被释放后,返回表示按键被按下的标志 KEY_DOWN。以上是按键消抖的流程,调用了一个库函数 HAL_...