本方法不仅提供了us级别的延时,还包括了获取us级别的系统时间的方法。

//HAL库us延时的获取
__STATIC_INLINE uint32_t GXT_SYSTICK_IsActiveCounterFlag(void)
{
  return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk));
}

//获取系统us级别的时间
static uint32_t getCurrentMicros(void)
{
  GXT_SYSTICK_IsActiveCounterFlag();

  uint32_t m = HAL_GetTick();
  const uint32_t tms = SysTick->LOAD + 1;
  __IO uint32_t u = tms - SysTick->VAL;

  if (GXT_SYSTICK_IsActiveCounterFlag()) 
  {
    m = HAL_GetTick();
    u = tms - SysTick->VAL;
  }

  return (m * 1000 + (u * 1000) / tms);
}

//获取系统时间,单位us
uint32_t user_sys_time(void)
{
  return getCurrentMicros();
}

//us级别延时
void User_Delay_us(uint32_t us)
{
	uint32_t now_time=getCurrentMicros()+us;
	while(now_time>=getCurrentMicros());
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐