Timer STM32上Systick定时器的功耗
在我正在编写的代码(STM32L4项目)中,Systick每1ms被启用一次,其中断被启用。这意味着每隔1ms CPU就会退出WFI(目前CPU大约有2/3的时间处于睡眠模式)。Timer STM32上Systick定时器的功耗,timer,arm,stm32,Timer,Arm,Stm32,在我正在编写的代码(STM32L4项目)中,Systick每1ms被启用一次,其中断被启用。这意味着每隔1ms CPU就会退出WFI(目前CPU大约有2/3的时间处于睡眠模式)。 我想知道使用Systick是否会消耗太多的电力,您认为如何?首先,测量中断处理程序需要多长时间。您可以(但它将非常不准确,不计算处理程序的进入和退出周期),或启动计时器(TIM2或TIM5,因为它们是32位,否则请注意溢出),告诉控制器使用RCC->APBxSMENR寄存器在睡眠模式下停止,然后,您将获得控制器未睡眠时
我想知道使用Systick是否会消耗太多的电力,您认为如何?首先,测量中断处理程序需要多长时间。您可以(但它将非常不准确,不计算处理程序的进入和退出周期),或启动计时器(
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;
}
什么是功率过大?您是否使用硬币电池,并且需要它使用数年?你有电源吗?你需要添加细节。你需要mA中的数字吗?我真的看不出你的评论有什么意义。对于大多数电池供电的设备来说,功耗是一个主要(也是困难的)问题。那么,一个供电的外围设备的功耗是不计数还是计数?为什么不直接测量呢?启动计时器将芯片放入wfi中,无中断,然后进行相同的计时器设置,但不断言启用,测量功耗。如果你能准确地测量,你会感到震惊,而这是你最不担心的功耗…另一方面,启用计时器外围设备,你可能能够测量,即使你启用了时钟门,但不启动计时器。systick应该更便宜,但只是测量和查看……我没有使用HAL,但我在代码中保留了相同的systick API,但修改了实现以使用LPTIMx。我看到的好处是它与CPU频率无关,因此我可以在不改变systick时基的情况下降低该频率(用于功耗)。