STM32使用TIM内部计数器(CNT)实现按键长、短按
1.工具
STM32CUBE、IAR
STM32F411VET6
2.实现
2.1案例说明
按键:本案例使用PA0,高电平有效(按下引脚电平为1,未按下为0)
长按: 按键从按下到释放时间 > 2s
短按: 按键从按下到释放时间 < 1s
长按功能:LED15翻转1次,调用HAL_GPIO_TogglePin( GPIOD, GPIO_PIN_15);
短按功能:LED12翻转1次,调用HAL_GPIO_TogglePin( GPIOD, GPIO_PIN_12);
2.2 方法
一般按键短按一次用时100ms,因此对TIM进行预分频,使其内部CNT每计一个数用时为1ms。当按键按下时将TIM内部的CNT进行保存,释放时再保存一次,计算2次CNT的差值,从而进行长按、短按判定
F411VET6定时器TIM3内部CNT是32bit的,可以计时达到us级别,这里设置溢出值为60000即60ms,(没有打开中断,只是利用CNT计1个数用时1ms),另外也可利用定时器+中断+计数器实现长、短按,大概思路这样,设置TIM短长时间进入中断1次,进入中断后计数器累加,判断计数器从而实现长短按(文章后边有该方法实现的结果(5ms进入1次中断))
|