网站返回500错误页面,西安门户网站建设公司哪家好,专业网站建设推荐q479185700顶上,90设计网站可以商用吗1.1 STM32待机模式简介 STM32单片机具有低功耗模式#xff0c;包括睡眠、停止和待机三种。 运行状态下#xff0c;HCLK为CPU提供时钟。HCLK由AHB预分频器分频后直接输出得到。 低功耗模式选择需考虑电源消耗、启动时间和唤醒源。 睡眠模式停CPU不停外设时钟#xff1b; 停止…1.1 STM32待机模式简介 STM32单片机具有低功耗模式包括睡眠、停止和待机三种。 运行状态下HCLK为CPU提供时钟。HCLK由AHB预分频器分频后直接输出得到。 低功耗模式选择需考虑电源消耗、启动时间和唤醒源。 睡眠模式停CPU不停外设时钟 停止模式停所有时钟 待机模式关闭1.8V内核电源。留备份电路和待机电路供电。 睡眠模式 进入WFI/WFE唤醒任一中断/事件时钟CPU时钟关其他不受影响电压调节器开停机模式 进入PDDSLPDSSLEEPDEEPWFI/WFE唤醒外部中断时钟1.8V区域时钟关HSI/HSE振荡器关电压调节器无关闭状态待机模式 进入PDDSSLEEPDEEPWFI/WFE唤醒WKUP引脚、RTC警告、NRST复位、IWDG复位时钟1.8V区域时钟关HSI/HSE振荡器关电压调节器关 低功耗模式下电源控制寄存器PWR_CR可设置开/关 STM32 低功耗一览表 待机模式功耗最低仅需约2uA电流 停机模式次之典型消耗约20uA 睡眠模式功耗相对较高。 用户可根据需求选择适合的低功耗模式。 STM32待机模式是最低功耗模式关闭电压调节器1.8V供电区断电PLL、HSI、HSE振荡器停止SRAM和寄存器内容不保仅备份寄存器和待机电路保持供电。 待机模式流程 可通过外部复位、独立看门狗复位、WKUP引脚上升沿或RTC闹钟事件退出待机。 唤醒后除PWR_CSR外所有寄存器复位执行流程与复位后相同。 PWR_CSR指示由待机状态退出。 待机时仅复位、TAMPER特定配置下及使能的WK_UP引脚有效其余IO引脚高阻。 进入待机模式涉及到电源控制寄存器(PWR_CR)和电源控制/状态寄存器(PWR_CSR)。 可通过设置电源控制寄存器PWR_CR的PDDS位使CPU进入深度睡眠时进待机模式。 同时可通过 CWUF位清除之前的唤醒位。 电源控制寄存器PWR_CR 1.2 待机模式配置 1使能电源时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
2设置 WK_UP 引脚作为唤醒源
PWR_WakeUpPinCmd(ENABLE);
3进入待机模式 设置 SLEEPDEEP 位。 设置 PDDS 位。 执行 WFI 指令。
void PWR_EnterSTANDBYMode(void) { // 设置 SLEEPDEEP 位SCB-SCR 的第 2 位 SCB-SCR | SCB_SCR_SLEEPDEEP; // 设置 PDDS 位进入深度睡眠时进入待机模式 PWR-CR | PWR_CR_PDDS; // 执行 WFI 指令进入待机模式 __WFI();
}
4编写 WK_UP 中断函数 实现开机与进入待机模式的逻辑。 长按 WK_UP 按键PA0开机DS0 闪烁指示程序运行。 再次长按则进入待机模式DS0 关闭。
void EXTI0_IRQHandler(void) { static uint32_t press_time 0; static uint8_t is_running 0; if (EXTI_GetITStatus(EXTI_Line0) ! RESET) { // 检测按键按下时间 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) 0) { press_time; } else { if (press_time 300) { // 假设 3 秒为长按 if (is_running) { // 进入待机模式 PWR_EnterSTANDBYMode(); } else { // 开机DS0 闪烁指示程序运行 is_running 1; while (1) { GPIO_ToggleBits(GPIOD, GPIO_Pin_0); for (volatile int i 0; i 1000000; i); } } } press_time 0; } EXTI_ClearITPendingBit(EXTI_Line0); }
}