在APM32E103系列芯片进入低功耗模式前,一般会执行如下几行代码
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
以下为此代码详解:
在APM32F103这类微控制器中,电源时钟(通常是主时钟源)与芯片内部的许多部分都有关系。以下是一些主要的相关部分:
中央处理单元(CPU):这是微控制器的主要计算部分,负责执行程序代码。CPU的操作是由时钟驱动的,因此电源时钟对CPU的运行至关重要。
系统外设:STM32F103包含了许多内置的系统外设,如GPIO(通用输入/输出)、UART(通用异步接收/发送)、SPI(串行外设接口)、I2C(双向双线串行总线)、ADC(模拟数字转换器)、DAC(数字模拟转换器)等。这些外设的操作通常都需要时钟信号。
内存:这包括随机存取存储器(RAM)和读-只存储器(ROM),它们用于存储程序代码和运行时数据。内存的读写操作也需要时钟信号。
总线系统:这包括处理器与内存、外设等之间的数据通道。数据的传输通常需要时钟信号。
时钟树:STM32F103有一个复杂的时钟系统,包括外部高速时钟(HSE)、内部高速时钟(HSI)、PLL(锁相环)等。这些时钟源通过时钟树连接到处理器和外设。
在芯片内部,几乎所有的电子系统都需要电源时钟来驱动,因此电源时钟是微控制器正常工作的基础。
PMU_EnterSTOPMode(PMU_REGULATOR_ON, PMU_STOP_ENTRY_WFI);
在这个配置中,微控制器在STOP模式下保持电压调节器开启(REGULATOR_ON)。这意味着微控制器的内核电压在STOP模式下不会降低。尽管这会导致微控制器在STOP模式下消耗更多的功耗,但是从STOP模式恢复到运行模式的唤醒时间会更短。
PMU_EnterSTOPMode(PMU_REGULATOR_LOWPOWER, PMU_STOP_ENTRY_WFI);
在这个配置中,微控制器在STOP模式下将电压调节器置于低功耗状态(REGULATOR_LOWPOWER)。这会降低微控制器在STOP模式下的功耗,但是从STOP模式恢复到运行模式的唤醒时间可能会更长,因为需要时间来重新启动电压调节器。
WFI (Wait For Interrupt):这个指令会将微控制器置于待机模式,直到收到一个中断信号。当微控制器收到中断信号后,它会退出待机模式,开始执行中断处理程序。这个指令通常用于情况下,微控制器无需执行任何操作,可以等待一个特定的中断信号,例如定时器中断或外部硬件中断。
WFE (Wait For Event):这个指令也会将微控制器置于待机模式,但它可以被两种类型的信号唤醒:中断信号和事件信号。事件信号是一种特殊类型的信号,可以由软件设置和清除。与中断不同的是,事件不会导致微控制器开始执行一个中断处理程序。相反,当微控制器收到一个事件信号时,它只是简单地退出待机模式,然后继续执行下一条指令。这个指令通常用于微控制器需要在没有中断发生的情况下被唤醒,例如在多核或多线程环境中。
总的来说,WFI和WFE指令都用于将微控制器置于低功耗模式,直到收到一个信号。这两个指令的主要区别在于它们对待唤醒信号的方式:WFI只能被中断唤醒,而WFE可以被中断或事件唤醒。
|