外部中断与按键消抖 1,用cubemx创建工程 设置中断通道 2、设置触发方式 3、开启中断 4、编写中断函数
在stm32l0xx_it.c文件中编写 uint32_t EXIT_NUM = 0; uint32_t EXIT_CI(void) { returnEXIT_NUM; } void EXIT_INIT(void) { EXIT_NUM= 0; } void HAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin) { if(GPIO_Pin== EXIT_Pin) EXIT_NUM += 1; }
5、按键检测函数 typedef enum { posedge, //按键刚按下 negedge, //按键刚松开 pressing, //按键按下 release //按键松开 }KeystateDef; //按键状态 uint8_t key_num = 0; uint8_t key_ci = 0;
KeystateDef key_Rea(void) { if(EXIT_CI()!= 0) { if(EXIT_CI()!= key_num && EXIT_CI() != 0) { key_num= EXIT_CI(); key_ci= 0; } else { key_ci= key_ci == 10 ? 10 : key_ci + 1; if(key_ci== 9) { if(!HAL_GPIO_ReadPin(EXIT_GPIO_Port,EXIT_Pin))return posedge ; else{ EXIT_INIT(); returnnegedge; } } elseif(key_ci == 10) return pressing; } } returnrelease; } 6、读取按键状态 KeystateDefkey = key_Rea(); 7、调用 main() { while(1) { KeystateDef key = key_Rea();
switch(key) { case posedge: sprintf(tab,"刚按下"); break; case negedge: sprintf(tab,"刚松开"); break; } } }
|