STM32上Systick定时器的功耗

时间:2018-04-27 14:17:07

标签: timer arm stm32

在我正在编写的代码(STM32L4项目)中,Systick启用每1ms滴答一次并启用其中断。这意味着CPU每隔1ms从WFI退出(目前CPU在休眠模式下花费大约2/3的时间)。 我想知道它是否不会消耗太多的力量来使用Systick,您怎么看?

1 个答案:

答案 0 :(得分:2)

首先,测量中断处理程序需要多长时间。您可以count the cycles with DWT->CYCCNT and some code(但它会非常不准确,不计算处理程序的进入和退出周期),或启动计时器(TIM2TIM5,因为它们是32位,否则请注意溢出),告诉控制器使用RCC->APBxSMENR寄存器将其停止在睡眠模式,然后您将获得控制器未休眠多长时间的精确计数。

当您知道控制器未休眠多长时,您可以使用STM32CubeMX来计算功耗。

enter image description here

根本不使用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;
}