//实现间隔time_interval时间点亮红灯(此时间间隔并不是绝对的,是大于等于的关系)
//用于系统要求无延时且延时时间粗略的场合,比如间隔一段时间采样数据,间隔一段时间点亮状态灯等
//HAL_GetTick()是系统ms级别滴答时间
//轮询一遍此函数的时间显然要小于设置的时间间隔time_interval,否则每次都会触发也就起不到间隔的目的
uint32_t time_interval = 500;
void Light_SetStatus(void)
{
if(time_interval != )
{
uint32_t tick;
static uint32_t interval_cnt = ; tick = HAL_GetTick() / time_interval; if(tick > interval_cnt)
{
//这里加入间隔时间到的功能
Light_Red(LIGHT_ON);
} interval_cnt = tick;
}
}
另一种方式:
void Light_SetStatus(void)
{
if(time_interval != 0)
{
static uint32_t delay_start = 0; if(delay_start == 0)
{
delay_start = HAL_GetTick();
} if(HAL_GetTick() - delay_start > interval_cnt)
{
delay_start =0;
ret = Light_Red(LIGHT_ON);
}
}
}
第一种方式中interval_cnt会以自增的方式不断变大,所以可以利用这点做一些其它事情!