1. STM32F103C8T6低功耗模式基础
STM32F103C8T6作为一款经典的Cortex-M3内核微控制器,在电池供电的物联网设备中广泛应用,低功耗设计直接决定了设备的续航能力。很多人刚开始接触低功耗时,总觉得配置复杂,概念抽象,其实只要抓住几个核心点,就能轻松上手。
低功耗模式主要分为三种:睡眠模式(Sleep)、停止模式(Stop)和待机模式(Standby)。睡眠模式最省事,CPU停止工作,但外设时钟还在运行,唤醒后程序从原地继续执行。停止模式更省电,关闭了高速时钟(HSI/HSE)和PLL,但保留了寄存器内容和SRAM数据,唤醒后需要手动恢复时钟配置。待机模式最彻底,直接断电1.8V区域,只有备份寄存器和RTC等少数电路维持供电,唤醒后相当于系统复位。
实际项目中,我一般会根据任务周期来选择模式。比如需要每秒采集一次数据的传感器,用停止模式最合适;而每天只上报几次数据的设备,待机模式更省电。关键是要理解每种模式的唤醒机制和恢复成本,避免为了省电反而增加了系统复杂度。
2. 时钟系统深度配置与优化策略
时钟配置是低功耗设计的核心,STM32F103C8T6的时钟树虽然看起来复杂,但掌握几个关键点就能灵活运用。系统时钟(SYSCLK)可以由HSI(8MHz内部RC)、HSE(8MHz外部晶振)或PLL倍频后的时钟驱动。默认情况下,系统启动后使用HSI,如果检测到外部晶振,就会切换到HSE并通过PLL倍频到72MHz。
这里有个坑要注意:进入停止模式后,高速时钟会被关闭,唤醒时默认使用HSI(8MHz)。如果你不手动重新配置时钟,系统就会一直以8MHz运行,虽然功能正常,但性能下降。解决方法是在唤醒后调用SystemInit()函数,或者自己写个时钟恢复函数:
void Clock_Recovery(void)
{
RCC_HSEConfig(RCC_HSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
RCC_PLLCmd(ENABLE);
whi


5524

被折叠的 条评论
为什么被折叠?



