函数实现非阻塞式延时)
基于HAL_GetTick()函数实现非阻塞式延时首先在使用HAL_GetTick()函数时一般会存在两个变量uint32_tLastTime;//用以存放上一次运行时间uint32_tnow;//用于存放当前系统时间且该函数一般应放在while中不断刷新以双LED不同闪烁时间举例具体写法如下//为两个LED单独建立相应时间戳uint32_tled0_last_tickHAL_GetTick();uint32_tled1_last_tickled0_last_tick;while(1){uint32_tnowHAL_GetTick();/* LED0 每 300 ms 翻转一次。 */if(now-led0_last_tick300){led0_last_ticknow;HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);}/* LED1 每 500 ms 翻转一次。 */if(now-led1_last_tick500){led1_last_ticknow;HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);}}写法注意1.在面对不同延时要求时应当为每个延时任务单独建立时间戳。如果公用一个时间戳会造成第一个延时任务结束后导致计时清零从而无法触发其他延时任务的判断条件且在为多个延时任务建立时间戳时应当保证各个时间戳时间一致//正确写法如下uint32_tled0_last_tickHAL_GetTick();uint32_tled1_last_tickled0_last_tick;//错误法如下uint32_tled0_last_tickHAL_GetTick();uint32_tled1_last_tickHAL_GetTick();;/* 在错误写法中为每个时间戳都进行了赋值这就有可能造成由于编译器效率问题导致LED0与LED1时间戳时间不一致的问题产生 */2.在延时要求一致时可以采用同一个LastTime作为到达计时时间的标志位