在系统初始化的时候对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;
最后忘了要定义这几个变量,否则编译通不过。