停止模式基于 Cortex®-M4,带 FPU 深度睡眠模式,并结合外围时钟门控。电压调节器可以在正常或低功耗模式下配置。在停止模式下,1.2 V 域中的所有时钟都将停止,PLL、HSI 和 HSE RC 振荡器被禁用。内部 SRAM 和寄存器内容将保留。
为了达到STM32极致低功耗的水平,在进入STOP模式前需要做一些配置:
1、ADC必须除能,adc在stop模式下也会产生功耗,休眠前加上ADC_DeInit(ADC1);
2、未使用的GPIO管脚一律配置成ANALOG NOPULL模式。实测最小系统下,所有管脚配置成ANALOG NOPULL,stop模式休眠时能到19uA左右
3、已使用的GPIO管脚一定要注意是否和外部电流形成漏电。比较好的方式是在休眠将所有GPIO的配置、模式、电平都打印出来,对比电路图看下是否满足要求。
电平读取:HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)
模式读取:Print("PA:\nMODER: 0X%x\n OTYPER: 0x%x\n OSPEEDR: 0x%x\n PUPDR: 0x%x\n",
GPIOA->MODER, GPIOA->OTYPER, GPIOA->OSPEEDR, GPIOA->PUPDR);
然后根据需要配置休眠前GPIO模式和电平状态,让IO口保持我们期望的固定状态,否则可能存在不确定性漏电。