该系统提供多种低功耗模式,在CPU不需要运行时节省功耗(例如,在等待外部事件时)。用户根据应用程序选择特定的低功耗模式,以寻求低功率之间的最佳平衡消费,短启动时间和可用的唤醒源。
在睡眠模式,停止模式和待机模式下,如果备份域的电源正常供电,则备份域中的RTC可以正常运行。
从表可以看出,这三个低功率模式是渐进的,并且运行时钟或芯片功能越来越少,因此功耗越来越低。
睡眠模式的内核内核停止,所有外围设备都包括M3核心外围设备,例如NVIC和系统时钟(Systick),它们仍在任意中断呼叫命令。NVIC和系统时钟(Systick),仍在运行呼叫命令以唤醒事件的核心时钟。所有时钟都已停止为其他时钟和ADC时钟配置的PWR_CR,而无需打开模式。所有1.8V区域的时钟HSI和HSE振荡器要关闭或以低功率模式关闭(根据电源控制寄存器的设置设置)备用模式1.8V电源关闭配置配置pwr_cr report pr_cr reports+bit+bit wkup wkup wkup rising Edge,引脚RTC闹钟事件,NRST PIN上的外部重置,IWDG重置关闭到时钟HSI和HSE振荡器的所有1.8V区域以关闭睡眠模式,仅关闭了内核时钟,并且内核停止运行,但外围外围外围周围的外围周围的外围周围的外围。和CM3内核都像往常一样运行。有两种进入睡眠模式的方法。它的输入方法确定了睡眠中的唤醒方法,即WFI(等待中断)和WFE(等待事件),也就是说,通过等待“中断”并通过“事件”唤醒来唤醒。
功能和描述:
在停止模式下,所有其他时钟都进一步关闭,因此所有外围设备都停止工作。但是,由于1.8V区域中的某些电源未关闭,因此内核寄存器和内存信息也保留了停止模式的停止模式。启动并重新打开时钟,您可以继续从最后一站。可以通过任何外部中断(Exti)唤醒停止模式。在停止模式下,您可以选择电压调节器作为打开模式或低功耗模式。
功能和描述:
除了关闭所有时钟外,它还完全关闭了1.8V区域的电源。也就是说,从待机模式醒来后,由于没有前代码的操作记录,因此只能重置为芯片并重新检测引导条件。该程序是从scratch执行的。它有四个醒来的方法,即WKUP(PA0)引脚的上升边缘,RTC闹钟事件,NRST PIN的重置和IWDG(独立门狗)重置。
功能和描述:
我们了解,输入各种低功率模式时,您需要致电或命令。它们本质上是内核说明,这些说明被封装在库文件中的函数中。
对于这两个说明,我们通常只需要知道申请时。打电话给他们可以进入低功耗模式。函数“ wfi();”的格式和“ wfe();”编译器的构建-in函数,相应的汇编指令在函数内被调用)。
指示确定需要用中断唤醒它,并确定它可以唤醒。
1.打开STM32Cubemx软件,然后单击“新项目”
2.选择MCU和安装
3.配置Clock RCC设置,选择HSE(外部高速时钟)为Crystal/Cramic谐振器(Crystal/Ceramics Resonant)选择时钟配置,并且配置系统时钟SYSCLK为72MHz,以修改HCLK的值。
4.配置调试模式非常重要,否则将导致第一个录制程序遵循调试器的系统设置,选择调试作为串行线
STM32Cubemx使用HAL库的代码:
使用STM32标准库的代码:
初始化按钮中断模式,以便在输入睡眠模式时可以通过按钮唤醒Bento系统。查看STM32Cubemx Learning Notes(3)-exti(外部中断)接口使用
添加绿灯以指示跑步状态,红灯表示睡眠状态,蓝光表明它刚从睡眠状态唤醒。ViewSTM32Cubemx Learning Notes(2)-GPIO接口使用
添加到打印信息。查看STM32Cubemx学习笔记(6) - 串行使用
输入项目名称的IDE开发环境和项目路径MDK-RM V5,以生成每个外围的独立文件。所有初始化代码均在MAIN中生成。C检查:初始化代码在相应的外围文件中生成。例如,GPIO初始化代码是在GPIO.C.C.Click生成代码中生成代码中生成的。
当系统进入状态时,我们按实验板上的键1按钮使系统返回正常运行状态。执行中断服务功能时,将执行指令后的代码。
打开中断服务功能文件,找到Exti0中断服务功能的服务功能中断服务功能,然后调用GPIO外部中断处理功能以打开文件以查找外部中断处理功能的原型。然后调用中断恢复功能。
/注意:不应修改此功能,当需要回调时,hal_gpio_exti_calld可以在用户文件中 /
此功能不应更改。如果您需要使用回调函数,请重新完成用户文件中的功能。
根据官方提醒,我们应该再次定义该功能。这是一个弱的徽标。带有此功能的功能是一个微弱的功能,也就是说,您可以在其他地方编写具有相同名称和参数的函数。编译器将忽略此功能。您编写的功能;这是错误的定义。当未处理GPIO端口号时,编译器将不会报告警告。实际上,当我们开发时,我们将不再需要中断服务功能。我们只需要找到此中断恢复功能并将其重写,并且此回调功能仍然非常方便。启用了多个中断后,STM32Cubemx将自动将几个中断服务功能集成在一起,并调用回调函数,也就是说,无论如何,无论如何中断,我们只需要重写一个回调字母并确定通过的端口号。
接下来,我们添加此文件的底部
初始化完成后,LED和串行端口用于指示运行状态。当LED灯为绿色时,这意味着正常运行。当红灯为红色时,这意味着状态被停止。当蓝光时,这意味着只是从停止状态唤醒。在停止模式下,I/O端口将在停止之前维护状态,因此,当停止模式停止时,LED颜色灯也将保持红灯。
在执行一段时间后,请致电库功能以低功耗模式设置压力调节器以输入停止状态。由于可以在任何exti中断中唤醒停止模式,我们可以使用打断唤醒的按钮。
当系统进入状态时,我们按实验板上的键1按钮唤醒系统。执行中断服务功能时,执行函数后的代码。
-------------/
/重置所有外围设备,初始化闪光接口和系统。/ hal_init();
/用户代码开始init /
/用户代码结束初始 /
/配置系统时钟 / SystemClock_Config();
/用户代码开始sysinit /
/用户代码结束sysinit /
/ Intialize所有配置的外围设备 / mx_gpio_init();mx_usart1_uart_init();/用户代码开始2 / printf(“停止模式测试)
”); /用户代码开始2 /
/用户代码结束2 /
完成后,进入睡眠并减少功耗
} /用户代码结束3 /}
初始化完成后,LED和串行端口用于指示运行状态。当LED灯为绿色时,这意味着正常运行。当红灯为红色时,这意味着状态被停止。当蓝光时,这意味着只是从停止状态唤醒。在停止模式下,I/O端口将在停止之前维护状态,因此,当停止模式停止时,LED颜色灯也将保持红灯。
在执行程序一段时间后,请致电库函数hal_pwr_enterstopmode以低功耗模式设置调节器以输入停止状态。由于可以使用任何超级中断的WFI停止模式唤醒,因此我们可以使用该模式RTC闹钟中断唤醒。
当系统进入状态时,闹钟在3秒后醒来系统。执行中断服务函数时,将继续执行HAL_PWR_EnterstopMode函数之后的代码。
-------------/
/重置所有外围设备,初始化闪光接口和系统。/ hal_init();
/用户代码开始init /
/用户代码结束初始 /
/配置系统时钟 / SystemClock_Config();
/用户代码开始sysinit /
/用户代码结束sysinit /
/ Intialize所有配置的外围设备 / mx_gpio_init();mx_usart1_uart_init();/用户代码开始2 / printf(“停止模式测试)
”); /用户代码开始2 /
/用户代码结束2 /
完成后,进入睡眠并减少功耗
} /用户代码结束3 /}
原始:https://juejin.cn/post/7101857655001448478