学习STM32第二十天

devtools/2024/9/23 6:28:37/

低功耗编程

一、修改主频

STM32F4xx系列主频为168MHz,当板载8MHz晶振时,系统时钟HCLK满足公式 H C L K = H S E × P L L N P L L M × P L L P HCLK = \frac{HSE \times PLLN}{PLLM \times PLLP} HCLK=PLLM×PLLPHSE×PLLN,在文件stm32f4xx.h中可修改HSE
HSE
在文件system_stm32f4xx.c中可修改锁相环参数

PLL
适当降低主频可降低开发板功耗

二、睡眠模式

在主函数的while循环中加上睡眠模式函数__WFI(),代码如下

while(1){if(Serial_GetRxFlag() == 1){RxData = Serial_GetRxData();Serial_SendOneByte(RxData);OLED_ShowHexNum(1, 8, RxData, 2);}OLED_ShowString(2, 1, "Running");Delay_ms(500);OLED_ShowString(2, 1, "       ");Delay_ms(100);__WFI();//睡眠模式,但是外设还是处于工作状态}

可通过中断唤醒系统,完成中断任务之后继续进入睡眠模式

三、停机模式

停机模式下,CPU和外设都没有时钟,而外部中断不需要时钟因此只有外部中断可以唤醒,通过stm32f4xx_pwr.c中的函数PWR_EnterSTOPMode()进入停机模式。

int main(void)
{OLED_Init();CountSensor_Init();RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);OLED_ShowString(1, 1, "Count:");while (1){OLED_ShowNum(1, 7, CountSensor_Get(), 5);OLED_ShowString(2, 1, "Running");Delay_ms(100);OLED_ShowString(2, 1, "       ");Delay_ms(100);//第一个参数是指定电压调节器在停止模式里的状态//第二个参数是选择进入停止模式的指令PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);SystemInit();//重新启动HSE}
}

当一个中断唤醒导致退出停机模式时,HSI被选为系统时钟,需要注意。

四、待机模式

待机模式唤醒后,程序是从头开始执行的,也就是PWR_EnterSTANDBYMode();之后的语句不会被执行,而是直接从头开始运行。在进入待机模式之前,都要尽可能把外挂的模块都关掉,以达到省电目的。

int main(void)
{OLED_Init();MyRTC_Init();RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);OLED_ShowString(1, 1, "CNT :");OLED_ShowString(2, 1, "ALR :");OLED_ShowString(3, 1, "ALRF:");PWR_WakeUpPinCmd(ENABLE);//测试WKUP引脚上升沿唤醒功能uint32_t Alarm = RTC_GetCounter() + 10;		//设定闹钟RTC_SetAlarm(Alarm);						//闹钟寄存器是“只写”OLED_ShowNum(2, 6, Alarm, 10);while (1){OLED_ShowNum(1, 6, RTC_GetCounter(), 10);OLED_ShowNum(3, 6, RTC_GetFlagStatus(RTC_FLAG_ALR), 1);//查看闹钟标志位OLED_ShowString(4, 1, "Running");Delay_ms(100);OLED_ShowString(4, 1, "       ");Delay_ms(100);OLED_ShowString(4, 9, "STANDBY");Delay_ms(1000);OLED_ShowString(4, 9, "       ");Delay_ms(100);OLED_Clear();//关闭OLEDPWR_EnterSTANDBYMode();//进入待机模式后通过闹钟事件唤醒}
}

http://www.ppmy.cn/devtools/22797.html

相关文章

免费分享一套SpringBoot企业人事管理系统(员工管理,工资管理,档案管理,招聘管理),帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的SpringBoot企业人事管理系统(员工管理,工资管理,档案管理,招聘管理),分享下哈。 项目视频演示 【免费】SpringBoot企业人事管理系统(员工管理,工…

分布式与一致性协议之CAP(三)

CAP ACID理论:CAP的"酸",追求一致性。 提到ACID,它很容易理解,在单机上实现也不难,比如可以通过锁、时间序列等机制保障操作的顺序执行,让系统实现ACID特性。但是一说要实现分布式系统的ACID特性比较难实现呢&#xf…

生成对抗网络的无载体信息隐藏算法简介

一、研究背景 随着互联网技术的广泛应用和移动智能设备的快速普及,人们有了更多的途径传播和获取信息。每天海量的数据以视频、音频、图像、文字等各类形式在互联网中产生,这为人们的生活带来了极大的便利,但同时也引起了人们对信息泄露的担…

【prometheus】k8s集群部署AlertManager实现邮件和钉钉告警

目录 一、AlertManager概述 1.1 alertmanager简介 1.2 AlertManager核心概念 1.2.1 分组 1.2.2 抑制 1.2.3 静默 1.2.4 客户的行为 1.2.5 高可用性 二、Alertmanager部署邮箱告警 2.1 邮箱配置 2.2 Alertmanager global和route路由配置 2.3 部署prometheus和alertM…

【c++】【贪心】排队接水

排队接水 题目难度:中阶 时间限制:1000ms 内存限制:128MB 题目描述 有 n 个人在一个水龙头前排队接水,假如每个人接水的时间为 Ti,请编程找出这 n 个人排队的一种顺序,使得 n 个人的平均等待接水时间最…

中信银行深耕养老金融,构建多支柱养老金体系新格局

在应对人口老龄化这一全球性挑战的过程中,养老金融已成为中国金融领域的重要篇章。2024年4月25日,中信银行行长刘成在财新传媒主办的“2024中国养老产业论坛”上发表主旨演讲,深入阐述了养老金金融、养老服务金融、养老产业金融互促互进的大趋…

Hibernate:Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB

在spring里插入 BLOB字段 kp.setContent(content.getBytes()) 方法 :hibernate saveOrUpdate 报 Caused by: java.lang.ClassNotFoundException: oracle.sql.BLOB 使用tomcat 没问题,可服务器改为 WebSphere .就报错。 把Spring内置提供的NativeJdb…

【后端】python中字典合并的方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、python中字典简介二、python中字典合并的方法三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言&…