在我正在编写的代码(STM32L4项目)中,Systick启用每1ms滴答一次并启用其中断。这意味着CPU每隔1ms从WFI退出(目前CPU在休眠模式下花费大约2/3的时间)。 我想知道它是否不会消耗太多的力量来使用Systick,您怎么看?
答案 0 :(得分:2)
首先,测量中断处理程序需要多长时间。您可以count the cycles with DWT->CYCCNT and some code(但它会非常不准确,不计算处理程序的进入和退出周期),或启动计时器(TIM2
或TIM5
,因为它们是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;
}