欢迎光临散文网 会员登陆 & 注册

江科大学习笔记 _17.低功耗

2023-09-08 14:53 作者:自闭选手的Z23  | 我要投稿

一、修改主频

    看一下STM32标准库提供的system_stm32f10x.h和system_stm32f10x.c两个文件

它们提供了 SystemInit()SystemCoreClockUpdate()两个可供外部调用的函数和

提供了一个SystemCoreClock可供外部调用的变量。

SystemInit():用来配置时钟树

SystemCoreClock:表示主频频率的值

SystemCoreClockUpdate():根据当前时钟树的配置,更新SystemCoreClock,也就是更新主频频率的值。


    看一下SystemInit()函数:

SystemInit()中 ,在各种恢复默认配置之后,调用了如下函数:

追进去看:

根据不同的宏定义,执行不同的配置函数

所以 只要对 宏定义 进行 注释或解除注释,就能修改主频

如上图:解除了72M的宏,就进行设置时钟到72M的配置

继续追进去看:

HCLK是AHB时钟、PCLK是APB的时钟

最后,如果设置HSE失败,那么就会使用HSI作为时钟(8M),

用户可以在HSE设置失败里添加一些调试代码,失败的原因可以找找外部晶振问题。

以上就是SystemInit()函数进行的操作。


查看系统主频:这里使用了江科大的OLED显示工程

显示是72M,正确


在查看SystemInit()函数中说过,对宏定义进行注释或解除注释,就能修改主频


把system_stm32f10x.h和system_stm32f10x.c两个文件的只读属性去掉,修改注释。


如图

显示是36M,修改完成。

修改主频后,涉及时间的计算都需要修改,所以谨慎修改主频。



二、睡眠模式

睡眠模式:CPU关,外设继续运行;可以产生中断


这里使用睡眠模式来省电,在之前的串口发送接收工程上进行代码修改添加:

追进去看:

是汇编,记住就行

在while()循环最后添加     __WFI();    睡眠模式就完成了。


三、停止模式

查看标准库pwr头文件    stm32f1.x_pwr.h

这里使用江科大的红外计次工程

使用了PWR_EnterSTOPMode()函数,追进去查看:

第一个参数是:低功耗还是停止模式

第二个参数是:唤醒是中断还是事件


开启PWR时钟:

开启停止模式,中断触发:

退出停止模式之后,会默认使用HSI时钟,导致程序运行变慢,

要恢复HSE时钟,只需要再调用一次SystemInit(),在最后加上


四、待机模式

这里使用江科大的RTC实时时钟工程,设置一个闹钟,在闹钟时间到达后从待机模式唤醒。

修改如下:

1.设定一个10s的闹钟

标准库的设定闹钟函数

到设定时间后,闹钟标志位置一,

使用RTC_GetFlagStatus(RTC_FLAG_ALR)函数查看 闹钟标志位

代码如下:

当CNT等于ALR时,ALRF标志位置一。


2.添加待机功能

需要开启pwr时钟

在stm32f1.x_pwr.h  头文件中:

PWR_EnterSTANDBYMode();

整体代码如下:

每次闹钟时间到达后程序运行一次,之后进入待机模式。


江科大学习笔记 _17.低功耗的评论 (共 条)

分享到微博请遵守国家法律