博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STM32电源管理
阅读量:6612 次
发布时间:2019-06-24

本文共 1796 字,大约阅读时间需要 5 分钟。



(1)3时钟模式

①睡眠模式②停止模式③待机模式

1.睡眠模式:Cortex-M3内核(理解为CPU)停止工作,CPU供电1.8V有着,周边任何执行。执行

2.停机模式:全部时钟都停止,CPU电源1.8V没断。唤醒后从原来位置运行

3.待机模式:时钟全断,CPU电源1.8V也断,唤醒后程序又一次运行

可形象參考:

CPU:皇上

CPU电源1.8V:皇后

外设:将军

那么:

1.睡眠模式:仅仅有皇上睡觉

2.停机模式:皇上,将军睡觉

3.待机模式:皇上,皇后。将军全睡觉了

(原则:皇后不睡觉,程序可被保留,唤醒后从原来位置运行)

 

(二)程序简单介绍(库函数)

1.睡眠模式

while(1)                            	{					/* wait interrupt */		LED1( ON );					Delay(0xFFFFF);		LED1( OFF );		  		LED2( ON );			  		Delay(0xFFFFF);		LED2( OFF );		  		LED3( ON );			 		Delay(0xFFFFF);		LED3( OFF );		  	   				__WFI();						}

 __WFI(); 进入睡眠模式,随意中断唤醒。唤醒后不用再配置时钟

2.停止模式

①/*由于要使用其外设时钟等。故需用到pwr*/

#include "stm32f10x_pwr.h"

②/*使能电源管理单元的时钟*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

③进入停止模式

PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);

 

④唤醒:外部中断

由于将军睡了,(及外设时钟关了,因此须要又一次配置)唤醒后须要又一次启动HSE

SYSCLKConfig_STOP(); 

void SYSCLKConfig_STOP(void){	ErrorStatus HSEStartUpStatus;  /* 使能 HSE */  RCC_HSEConfig(RCC_HSE_ON);  /* 等待HSE准备就绪*/  HSEStartUpStatus = RCC_WaitForHSEStartUp();  if(HSEStartUpStatus == SUCCESS)  {    /* 使能 PLL */     RCC_PLLCmd(ENABLE);    /* 等待 PLL 准备就绪 */    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)    {    }    /* 选择PLL作为系统时钟源*/    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    /*等待PLL被选择为系统时钟源 */    while(RCC_GetSYSCLKSource() != 0x08)    {    }  }}

 3.待机模式

①/*由于要使用其外设时钟等,故需用到pwr*/

#include "stm32f10x_pwr.h"

 

②/*使能电源管理单元的时钟*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

③进入待机模式

/*使能WKUP引脚的唤醒功能,WKUP是第二功能。不用配置它的输出模式(不是太懂)*/PWR_WakeUpPinCmd (ENABLE);/*进入待机模式*/PWR_EnterSTANDBYMode();

④唤醒,复位唤醒。PA0上升沿唤醒

⑤检測是复位唤醒还是PA0上升沿唤醒

if(PWR_GetFlagStatus(PWR_FLAG_WU) == SET){  printf("\r\n PA0上升沿唤醒\r\n");}else  printf("\r\n 其它\r\n");

 由于待机唤醒程序从头运行,故不用多加配置时钟的函数了

                                                      狂人用脑子

版权声明:本文博主原创文章。博客,未经同意不得转载。

你可能感兴趣的文章
11.并发包阻塞队列之LinkedBlockingQueue
查看>>
植物大战僵尸
查看>>
Inner Functions - What Are They Good For?
查看>>
原创文章
查看>>
python之文件操作-复制、剪切、删除等
查看>>
LAMP环境搭建
查看>>
12.5 管理问题的解决方式
查看>>
Yocto tips (19): Yocto SDK Toolchian的使用
查看>>
Hilbert曲线简单介绍及生成算法
查看>>
css3实现可以计算的自适应布局——calc()
查看>>
理解JavaScript私有作用域
查看>>
Codeforces 626F Group Projects(滚动数组+差分dp)
查看>>
Docker实战之创建一个tomcat容器
查看>>
【Postgresql】use
查看>>
BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
查看>>
php 把一个数组分成有n个元素的二维数组的算法
查看>>
利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
查看>>
OAuth 2.0
查看>>
SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域
查看>>
基因治疗的现状
查看>>