使用SysTick定时器作为时间检测标记 在没有操作系统的情况下不需要延时等待浪费CPU执行资源
通常SysTick初始化为1ms产生一次中断 下面是使用例子
static volatile unsigned int SystemTicket;
WEAK_BEGIN void Systimer1msTickInIRQ(void) WEAK_END;
WEAK_BEGIN void Systimer1msTickInIRQ(void)
{
SystemTicket++;
}
unsigned int SetTimer(int mSec)
{
return SystemTicket + mSec;
}
int CheckTimer(unsigned int uTimeHandle)
{
int temp;
temp = SystemTicket - uTimeHandle;
return (temp >= 0);
}
SysTick中断函数
void SysTick_Handler(void)
{
Systimer1msTickInIRQ();
}
测试例子
void SysTicktets(void)
{
static unsigned int nTXDatTimer;
if (CheckTimer(nTXDatTimer))
{
nTXDatTimer= SetTimer(400);//400ms进来一次
}
}
按键检测例子
void Keyscan(void)
{
static unsigned int nTXDatTimer;
static unsigned char Key1 ,Key12;
if (CheckTimer(nTXDatTimer))
{
nTXDatTimer= SetTimer(10);//10进来一次
Key1 <<= 1;
Key2 <<= 1;
Key1 |= GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2);
Key2 |= GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3);
if( 0xff==Key1 ) //防止抖动 连续8次 1 80ms
{
//按键按下
}
else if( 0x00==Key1 )//防止抖动 连续8次0 80ms
{
//按键释放
}
}
}