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