您的位置:首页 > 其它

利用STM32的Systick中断实现按键消抖

2014-03-23 17:19 309 查看
在系统初始化的时候对systick进行初始化

void SysTickConfig(void)
{
/* Set SysTick Timer for 100us interrupts  */
if (SysTick_Config(SystemCoreClock / 10000))
{
/* Capture error */
while (1);
}
/* Configure the SysTick handler priority */
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
在stm32f4xx_it.c中加入

void SysTick_Handler(void)
{
Key_Scan();
}


在按键初始化中加入按键扫描函数

void Key_Scan(void)
{
/*检测是否有按键按下 */
if(	(GPIOG->IDR&(1UL<<5))!=(1UL<<5) )
{
kcount++;                         //有键按下,计数kcount加1
if(kcount>=32)                    //1MS中断一次,kcount大于等于32,即按键已按下32ms
{
if(label==0)                //判断有没有重按键,1为有,0为没有
{
keys1=1;                       //设置按键标志
kcount=0;
label=1;                     //设置重按键标志
}
else
kcount=0;
}
else
keys1=0;
}
else                                            //无按键按下
{
kcount=0;                      	 //清零kcount
keys1=0;                            //清除按键标志
label=0;                          //清除重按键标志
}
}
按键IO口初始化 PA0 PG4 PG5 三个IO口
void KeyInit(void)
{
/* Enable clock and init GPIO inputs */
RCC->AHB1ENR |= (1UL << 0) |
(1UL << 6) ;

GPIOA->MODER &= ~(3UL << 2* 0);
GPIOG->MODER &= ~(3UL << 2* 4);
GPIOG->MODER &= ~(3UL << 2* 5);
}
UL是指32位无符号整形数据 ,因此GPIOG->MODER &= ~(3UL << 2* 0);是指让PG5口作为输入;

uint8_t kcount;
uint8_t label;
extern uint8_t keys1;
最后忘了要定义这几个变量,否则编译通不过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: