话不多说,先上代码
uint8_t hcsr04_count_delay=65;
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
if(hcsr04_count_delay)
{
hcsr04_count_delay--;
if(hcsr04_count_delay==0)
{
hcsr04_count_delay=65;
hcsr04_send();
}
}
由STM32F103ZET6 72Mhz晶振,经测试,滴答定时器每跑一次为1ms,根据这个一定每ms跑一次的定时器,我们可以通过设定标志位判断来进行非阻塞型的延时,比如当我们想执行hcsr04_send();这个函数为65ms执行一次时,我们将hcsr04_count_delay的初值设为65,每1ms hcsr04_count_delay就执行-1操作,当执行65次时,hcsr04_count_delay值为0,也就是已经过了65ms,此时将hcsr04_count_delay重新赋值为65,并执行 hcsr04_send();函数,是不是很简单呢。