 停机模式
若用户将Cortex-M3处理器的电源控制寄存器(Cortex Power Control Register,Cortex_PCR)中的SLEEPDEEP位置位,然后将STM32F103C8T6电源控制寄存器(STM32 Power Control Register.STM32 PCR)中的PDDS(Power Down Deep Sleep)位清除,就完成了STM32F103C8T6停机模式的设置。
当停机模式设置完毕后,CPU一旦遇到WFI或WFE指令就会停止工作,HSI和HSE也进人关闭状态。但Flash和SRAM将会继续保持电源供应,所以此时STM32F103C8T6的所有工作状态仍然是保留着的。和睡眠模式一样,停机模式也可以通过外设中断唤醒,然面在停机模式下,除了外部中断控制单元,所有设备的时钟都被禁止了,只能通过在GPIO引脚上产生电平边沿触发外部中断的方式来将STM32从停机状态下唤醒。
需要注意的是,外部中断通道除了与GPIO连接,还和RTC时钟的报警事件连接,加之RTC的计数时钟并非来源于STM32F103C8T6的设备总线(而是直接来自于LSI或LSE),因此还可以使用RTC模块实现定时将STM32F103C8T6从停机状态中唤醒。
在停止模式中,相对于休眠模式进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。唤醒后,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。停止模式唤醒后,STM32F103C8T6会使用 HSI(HSI为8M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回HSE。唤醒延迟基本上是 HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若FLASH工作在掉电模式,还需要加上 FLASH 从掉电模式唤醒的时间。