5.1.4 稳压器
一个嵌入式线性稳压器为所有数字电路提供电源,除了待机电路。稳压器输出电压(VCORE)可以软件编程为三种不同电压范围1.2-1.8V(典型)(参见5.1.5)。
重启后稳压器总是使能的。它工作于三种不同模式:main(MR),low power(LPR)和power down,这取决于应用程序模式。
在Run模式下,稳压器处于main(MR)模式,并为VCORE域(core核,memories内存和数字外围)提供全功率电力。
在Low power run模式下,稳压器处于low poer(LPR)模式,并为VCORE域提供低功率电力,寄存器内容和内部SRAM的内容保持不变。
在Sleep模式下,稳压器处于main(MR)模式,并为VCORE域提供全功率电力,寄存器内容和内部SRAM的内容保持不变。
在Stop模式下,稳压器为VCORE域提供低功率电力,寄存器内容和内部SRAM的内容保持不变。
在Standby模式下,稳压器电源关闭。除了待机电路,寄存器内容和内部SRAM的内容丢失。
5.2.3 可编程的电压探测器(PVD)
可以使用(Power Voltage Detector)PVD检测VDD电源电压的大小,这是通过配置PWR_CR寄存器的PLS[2:0]比特选择一个门限进行比较来实现的。
PVD可以使用外部输入模拟电压(PVD_IN)与VREFINT进行比较。此时,PVD_IN(PB7)引脚必须配置为模拟模式,即PLS[2:0]=111。通过PVDE比特使能PVD。
PWR_CSR寄存器的PVDO标识位用以标识VDD是否高于或者低于PVD门限。该事件内部连接于EXTI Lin16,并且能够通过使能EXTI寄存器来产生中断。VDD电压低于PVD门限或者VDD高于PVD门限时PVD都可以输出中断,这取决于EXTI line16是配置的中断是上升沿还是下降沿触发。作为一个例子,可以再该中断服务程序中执行紧急关机操作。
5.2.4 内部电压参考(VREFINT)
内部参考电压(VREFINT)为外围模拟电路提供稳定电压。使用到内部参考电压(VREFINT)的模块有BOR,PVD,ADC,LCD和比较器。如果BOR,PVD,ADC,LCD和比较器的任何一个启用,那么内部参考电压(VREFINT)将被激活。
内部参考电压的消耗是不可忽视的,尤其在Stop和Standby模式下。为减少能量消耗,PWR_CR寄存器的ULP(Ultra low power)比特可以设置为关闭内部参考电压。然而,在这种关闭的情况下,系统退出Stop/Standby模式后,在内部参考电压启动时(达到3ms)那些使用了内部参考电压的功能模块将不保证稳定。
为减少启动时间,系统在退出Stop/Standby模式时不需要等待内部参考电压启动的时间。这可以在进入Stop/Standby模式之前,通过设置PWR_CR寄存器的FWU(Fast wakeup)比特。
如果设置了ULP比特,在进入Stop/Standby模式之前就使能的这些功能将在进入这些模式之后被关闭,并且不论FWU设置与否,在内部参考电压启动后重新使能。PWR_CSR寄存器的VERFINTRDYF标志位标识了内部参考电压准备就绪。
5.3 低功耗模式
默认情况下,单片机在系统重启或者开机重启后处于Run模式。在Run模式下CPU的时钟由HCLK提供,程序代码也处于执行过程当中。多种低功耗模式可以使用,以便于在CPU不需要保持运行的时候达到节能目的,比如当等待外部事件时。选择何种低功耗模式由用户来选择决定,这需要综合考虑低功耗、性能、低启动延时和可选的唤醒来源。
设备拥有5种低功耗模式:
低功耗运行模式(Low power run mode):稳压器进入低功耗模式,有限时钟频率,有限数目外围模块运行。
睡眠模式:Coretex-M3核停止,外围保持运行。
低功耗睡眠模式:Cortex-M3核停止,有限时钟频率,有限数目外围模块运行,稳压器处于低功耗模式,RAM关机,Flash停止。
停止模式:所有时钟停止,稳压器(regulator)保持运行,稳压器(regulator)处于低功耗模式。
待机模式:VCORE域关闭。
另外,可以在Run模式下使用以下的方法降低功耗:
降低系统时钟
Gating the clocks to the APBx and AHBx peripherals when they are unused.
5.3.1 在低功耗模式下时钟表现
APB外围和DMA时钟可以被软件关闭。
睡眠(sleep)和低功耗睡眠(low power sleep)模式下:
CPU时钟在睡眠和低功耗睡眠模式下停止。存储器接口 时钟(FLITF接口和RAM接口)和所有外围时钟可以在睡眠期间被软件停止。在低功耗睡眠模式下,memory interface(FLITF)时钟停止,RAM关机。当连接到AHB和APB桥时钟的所有外围时钟关闭,那么AHB和APB桥时钟在Sleep/Low power sleep模式下将被硬件关闭。
Stop和Standby模式下:
系统时钟和所有高速时钟在Stop和Standby模式下都停止:
PLL被关闭
内部RC 16MHz(HSI)振荡器被关闭
外部1-24MHz(HSE)振荡器被关闭
内部65kHz-4.2MHz(MSI)振荡器被关闭
当由于中断(Stop模式下)或者重启(Standby模式)退出这两种模式,内部MSI振荡器被选择为系统时钟。当退出Stop模式时,原先的MSI配置保持不变(范围和微调值)。当退出Standby模式,范围和微调值复位为默认的2MHz值。
如果Flash编程操作或者APB域访问正在执行中,Stop/Standby模式在进入前会有延迟,直到Flash操作和APB访问执行完毕。
5.3.2 降低系统时钟
Run模式下系统时钟(SYSCLK,HCLK,PCLK1,PCLK2)可以通过预分频寄存器降低速率。在进入睡眠(sleep mode)模式前,这些预分频寄存器还可以被用来降低外围时钟速率。
更多详细信息参考6.3.3节:Clock configuration register(RCC_CFGR)。
5.3.3外设时钟门控
在Run模式下,HCLK和PCLKx的个别外围和存储器可以在任何时间被停止以降低能耗。
在执行WFI和WFE指令之前,可以在睡眠模式下通过关闭外部时钟来进一步降低功耗。
外部时钟门控由AHB外围时钟使能寄存器(RCC_AHBENR),APB2外围时钟使能寄存器(RCC_APB2ENR),APB1外围时钟使能寄存器(RCC_APB1ENR)控制。(参见6.3.8, 6.3.9, 6.3.10)。
睡眠模式下可以通过复位RCC_AHBLPENR寄存器和RCC_APBxLPENR(x可以是1或2)相应的使能位来关闭外围时钟。
5.3.4 低功耗运行模式(Low power run mode:LP run)
在Run模式下如果想要进一步降低功耗,稳压器可以配置为低功耗模式。在该模式下,系统频率不应当超过f_MSI的range 1(参见6.2.3).
请参考产品datasheet,以查阅更详细的关于稳压器和外围操作条件信息。
Note:
当 APB1时钟频率小于 RTC时钟频率的7倍 (7*RTCLCK)时,为读取 RTC 日历寄存器的值, 软件必须读取日历和时间/日期寄存器两次。如果前后连续两次读取的值一致,那么就认为读取的日历值是正确的,否则需再读取一次。
低功耗运行模式仅仅可以在VCORE 在 range 2的情况下进入。 另外, 当选择了Low power run模式不得使用动态电压调节(dynamic voltage scaling)。 当选择Low power run 模式后,Stop和Sleep模式 下regulator只允许配置为 Low power 模式。
Note: 在低功耗运行模式下,所有I/O引脚都保持原先在Run模式下的状态。
进入Low power run mode:
进入Low power run mode执行以下过程:
每个数字IP 时钟通过RCC_APBxENR和RCC_AHBENR寄存器进行使能和不使能。
需降低系统时钟频率,需不超过f_MSI range 1。
regulator通过软件强制设置为low power模式(设置LPRUN和LPSDSR比特)
退出Low power run mode:
退出Lower power run mode过程如下:
regulator通过软件强制为main regulator。
如果需要,打开Flash的电源。
可以增加系统时钟频率
5.3.5 Sleep模式
进入Sleep模式:
Sleep模式的进入通过执行WFI(Wait For Interrupt) 或者 WFE(Wait for Event)指令执行。有两种选项进入sleep模式,这根据Cortex-M3 System Control reguster的SLEEPONEXIT比特:
Sleep-now: 立即睡眠,如果SLEEPONEXIT比特清零,只要WFI或者WFE指令一执行MCU就立即进入Sleep模式;
Sleep-on-exit: 如果SLEEPONEXIT比特为1,MCU在退出最低优先级的ISR程序后立即进入Sleep模式。
Note: 在Sleep模式下,所有I/O引脚保持Run模式下的相同状态。
参考表28: Sleep-now和表29:Sleep-on-exit,详细描述了如何进入Sleep模式.
。。。。。。
。。。。。。
退出Sleep模式:
WFI指令用来进入Sleep模式,任何由NVIC应答的外部中断可以将MCU从Sleep模式下唤醒。
WFE指令用来进入Sleep模式,事件发生时MCU即退出Sleep模式。产生的唤醒事件可以是以下任意一种情况:
Enabling an interrupt in the peripheral control register but not in the NVIC, and enabling the SEVONPEND bit in the Cortex-M3 System Control register. When the MCU resumes from WFE, the peripheral interrupt pending bit and the peripheral NVIC IRQ channel pending bit (in the NVIC interrupt clear pending register) have to be cleared.
Or configuring an external or internal EXTI line in event mode. When the CPU resumes from WFE, it is not necessary to clear the peripheral interrupt pending bit or the NVIC IRQ channel pending bit as the pending bit corresponding to the event line is not set.
这种模式唤醒时间最小,这是由于中断的出入没有花时间。
5.3.6 Low power sleep 模式(LP sleep)
进入Low power sleep模式:
通过配置voltage retulator为low power mode进入low power sleep模式,然后执行WFI或者WFE指令。在这种模式下,Flash不可访问,但是RAM仍然可以访问。
这种模式下,系统频率不可超过f_MSI range 1.
请参考产品手册以获取更多voltage regulator的详细内容和外部操作条件。
Low power sleep 模式只有当VCORE处于range 2.
Note:
当 APB1时钟频率小于 RTC时钟频率的7倍 (7*RTCLCK)时,为读取 RTC 日历寄存器的值, 软件必须读取日历和时间/日期寄存器两次。如果前后连续两次读取的值一致,那么就认为读取的日历值是正确的,否则需再读取一次。
有两种选项进入sleep low power的方法,这根据Cortex-M3 System Control reguster的SLEEPONEXIT比特:
Sleep-now: 立即睡眠,如果SLEEPONEXIT比特清零,只要WFI或者WFE指令一执行MCU就立即进入Sleep模式;
Sleep-on-exit: 如果SLEEPONEXIT比特为1,MCU在退出最低优先级的ISR程序后立即进入Sleep模式。
进入Low power sleep模式,执行下面的过程:
通过FLASH_ACR寄存器的SLEEP_PD比特关闭Flash存储器。更多详细信息参考Section 3. 这可以降低功耗,但是会导致增加唤醒时间。
每个数字IP 时钟通过RCC_APBxENR和RCC_AHBENR寄存器进行使能和不使能。为保持Low power sleep模式持续运行,数字IP时钟必须通过RCC_APBxLPENR和RCC_AHBLPENR使能。
必须降低系统时钟频率。
通过软件(设置LPSDSR比特)强制regulator进入low power 模式。
通过执行WFI/WFE指令进入Sleep模式。
Note: 在Low power sleep模式下,所有I/O保持和Run模式下一致的状态。
参考表30: Sleep-now和表 31: Sleep-on-exit描述了详细的如何进入low power sleep模式。
退出Low power sleep模式:
如果用WFI指令用于进入Low power sleep模式,则任何由NVIC应答的外部中断可以将MCU从low power Sleep模式下唤醒。
WFE指令用来进入Sleep模式,事件发生时MCU即退出Sleep模式。产生的唤醒事件可以是以下任意一种情况:
Enabling an interrupt in the peripheral control register but not in the NVIC, and enabling the SEVONPEND bit in the Cortex-M3 System Control register. When the MCU resumes from WFE, the peripheral interrupt pending bit and the peripheral NVIC IRQ channel pending bit (in the NVIC interrupt clear pending register) have to be cleared.
Or configuring an external or internal EXTI line in event mode. When the CPU resumes from WFE, it is not necessary to clear the peripheral interrupt pending bit or the NVIC IRQ channel pending bit as the pending bit corresponding to the event line is not set.
当通过中断或者唤醒事件退出Low power sleep模式时,regulator配置为main regulator模式。有必要的话就打开Flash存储器,也可以增加系统时钟频率。
当voltage regulator处于(low power mode)低功耗模式,从low power sleep模式唤醒需要额外的启动延迟。
参考表30:Sleep-now和表31:Sleep-on-exit给出了详细的退出过程。
。。。。。。。。
。。。。。。。。
5.3.7 Stop模式
stop模式基于Cortex-M3的deepsleep模式和外部时钟门控。voltage regulator可以配置为normal或者low-power模式。stop模式下,所有VCORE域下的时钟都停止,PLL,MSI,HSI和HSE RC振荡器关闭了。内部SRAM和寄存器内容保持不变。
为获得Stop模式下最低功耗,内部Flash存储器也进入低功耗模式。当Flash存储器处于低功耗模式,从Stop模式唤醒会有额外的延迟时间。
为降低stop模式下的功耗,VREFINT,BOR,PVD和温度传感器可以在进入Stop模式前被关闭。可以使用PWR_CR寄存器的ULP比特在退出Stop模式后重新开启它们。
Note: 在Stop模式下,所有I/O引脚保持与Run模式下一致。
进入Stop模式:
参考表32更多关于进入Stop模式的详细描述。
Note: 如果再进入stop模式前需要关闭外部时钟(external clock), HSEON比特必须先关闭,并且系统时钟需切换到HSI。
否则,如果HSEON比特保持使能,而外部时钟(外部晶振)可以在进入stop模式前去除,时钟安全系统(clock security system CSS)必须使能,以检测外部晶振出错,避免在进入stop模式时失灵。
为进一步降低stop模式下的功耗,内部voltage regulator可以设置为low power模式。这通过设置PWR_CR寄存器的LPSDSR比特(参见5.4.1节)。
如果Flash存储器在编程中或者APB域正在访问中,则只有在这些操作完毕之后才能进入stop模式。
stop模式下,可以配置特定的控制bit以来设置下述一些属性:
独立看门狗(IWDG):通过往写入key寄存器或者硬件选项(hardware option)启动IWDG. 一旦启动无法停止,除非重启。参考21.3.和21.
RTC: 通过RCC_CSR寄存器的RTCEN比特设置。
内部振荡器(LSI RC): 由RCC_CSR寄存器的LSION比特配置。
外部32.768kHz振荡器(LSE OSC): 这由RCC_CSR寄存器的LSEON比特配置。
ADC,DAC或LCD仍然会在Stop模式下消耗电能,除非在进入stop模式之前关闭他们。关闭这些模块,可以通过设置ADC_CR2寄存器的ADON比特和DAC_CR寄存器的ENx比特都为0来实现。
退出stop模式:
参考表32更多关于stop退出的描述。
通过中断或者唤醒时间从stop模式退出时,MSI RC振荡器默认作为系统时钟。
当voltage regulator处于low power 模式,从stop唤醒启动时会有额外的延迟。当stop模式期间保持regulator的启动,尽管这样子可以减少唤醒时间,但是增加了功耗。