STM32上一个Systick定时器的功耗

Power consumption of a Systick timer on STM32

在我正在处理的代码(STM32L4 项目)中,启用 Systick 每 1 毫秒滴答一次,并启用其中断。这意味着 CPU 每 1ms 从 WFI 退出一次(目前 CPU 大约有 2/3 的时间处于睡眠模式)。 我想知道使用Systick会不会太耗电,你觉得怎么样?

首先,测量中断处理程序需要多长时间。您可以 (但它会很不准确,不计算例如处理程序进入和退出周期),或者启动计时器(TIM2TIM5 因为它们是 32 位,否则请注意溢出),告诉控制器使用 RCC->APBxSMENR 寄存器将其停止在睡眠模式,然后您将有一个精确的周期计数控制器没有休眠的时间。

当你知道控制器有多久没有休眠时,你可以使用STM32CubeMX来计算功耗。

根本不使用 SysTick

如果您的程序中 SysTick 的唯一目的是维护毫秒计数器,您可以改用 32 位定时器。不是启动 Systick,而是启动计时器,并将对毫秒计数器的引用替换为 (TIM2->CNT)。使用 HAL 时,它只是

HAL_StatusTypeDef HAL_InitTick(uint32_t prio __attribute__((unused))) {
  RCC->APB1ENR = RCC_APB1ENR_TIM2EN;
  asm volatile("dsb sy");
  TIM2->CR1 = TIM_CR1_CEN;
  return HAL_OK;
}

uint32_t HAL_GetTick(void) {
  return TIM2->CNT;
}