复位后调节器总是使能。以3种不同的模式工作。
正常功耗模式提供1.8V电源
(内核,内存和外设)。低功耗模式提供1.8V电源
,以保存寄存器和SRAM的内容。停止供电
。除了备用电路和备份域外,寄存器和SRAM的内容全部丢失。STM32F10xxx有三种低功耗模式:
M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)
所有的时钟
都已停止)1.8V电源关闭
)AHB外设时钟使能寄存器
(RCC_AHBENR)、APB2外设时钟使能寄存器
(RCC_APB2ENR)和APB1外设时钟使能寄存器
(RCC_APB1ENR)来开关各个外设模块的时钟。该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
执行WFI或WFE指令进入睡眠状态。
选择睡眠模式进入机制:
在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
任意一个
被嵌套向量中断控制器响应的外设中断
都能将系统从睡眠模式唤醒。唤醒事件可以通过下述方式产生:
外设控制寄存器中使能一个中断,不是在NVIC中使能,且在Cortex-M3系统控制寄存器中使能SEVONPEND位。唤醒后处理:
MCU从WFE中唤醒后,外设的中断挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。
配置一个外部或内部的EXIT线为事件模式。唤醒后不需要处理:
当MCU从WFE中唤醒后,因为与事件线对应的挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位。
停止模式是睡眠模式的进一步应用
,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟被停止,PLL、HSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。
设置进入睡眠模式、设置电源控制寄存器(PWR_CR)的LPDS位使内部调节器进入低功耗模式,能够降低更多的功耗。
正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。
正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。
通过对独立的控制位进行编程,可选择以下功能:
注意:
进入该模式前ADC和DAC没有被关闭,那么这些外设仍然消耗电流。通过设置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位为0可关闭这2个外设。
启动后默认HSI RC为系统时钟,需要重新配置
如何解决唤醒后的启动延时?
当电压调节器处于低功耗模式下,当系统从停止模式退出时,会有一段额外的启动延时。
在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗增加。
待机模式可实现系统的最低功耗。
该模式是在深睡眠模式时进一步关闭了电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。 只有备份的寄存器和待机电路维持供电(外部电池)。
设置独立的控制位,选择以下待机模式的功能(保留的功能
):
待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位
。代码执行等同于复位后的执行
(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:
在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试连接,因为Cortex™-M3的内核失去了时钟
。
RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。
RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。
通过备份区域控制寄存器(RCC_BDCR)的RTCSEL[1:0]位的编程,三个RTC时钟源中的二个时钟源可以选作实现此功能。
低功耗32.768kHz外部晶振(LSE):该时钟源提供了一个低功耗且精确的时间基准。(在典型情形下消耗小于1μA) ● - 低功耗内部RC振荡器(LSI RC):使用该时钟源,节省了一个32.768kHz晶振的成本。但是RC振荡器将少许增加电源消耗。
为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:
如果要从待机模式中唤醒,不必配置外部中断线17。