STM32 HAL库 获取系统us时间

该博客介绍了如何在STM32使用HAL库时获取系统微秒时间。通过修改Arduino的stm32库代码,实现了从嘀嗒定时器获取微秒级时间的函数`micros()`。关键步骤包括读取嘀嗒定时器的控制和状态寄存器,计算当前计数值,并转换为微秒。代码适用于STM32CUBEMX配置默认的嘀嗒定时器系统时钟。
摘要由CSDN通过智能技术生成

STM32 HAL库 获取系统us时间

适用于使用嘀嗒定时器作为系统时钟的系统,stm32cubemx配置默认都是嘀嗒定时器
ms时间可以直接使用HAL_GetTick函数获取,us时间HAL库默认没有提供,我们可以自己写

全部代码:

__STATIC_INLINE uint32_t GXT_SYSTICK_IsActiveCounterFlag(void)
{
  return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk));
}
static uint32_t getCurrentMicros(void)
{
  /* Ensure COUNTFLAG is reset by reading SysTick control and status register */
  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 micros(void)
{
  return getCurrentMicros();
}

节选自Arduino的stm32库,小小改一下就可以直接用在HAL库上

使用时直接调用micros函数就可以了


代码讲解:

  • GXT_SYSTICK_IsActiveCounterFlag可以直接不看
  • 关键就在下面这段
//获取当前ms
uint32_t m = HAL_GetTick();
//获取嘀嗒定时器重装载值
const uint32_t tms = SysTick->LOAD + 1;
//获取当前滴答定时器计数值
__IO uint32_t u = tms - SysTick->VAL;
//返还对应的值
return (m * 1000 + (u * 1000) / tms);

关于嘀嗒定时器,不了解可以查看相关文章。
快速查看值的变化可以看我的这篇博客底下得两张图片帮助理解
链接

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值