当前位置: 首页 > news >正文

STM32电源管理

(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");

 因为待机唤醒程序从头执行,故不用多加配置时钟的函数了

 

                                                      瘋子随记

转载于:https://www.cnblogs.com/Ph-one/p/4026775.html

相关文章:

  • 'telnet'不是内部或外部命令,怎么办?
  • 陶瓷天线
  • FSMC(STM32)
  • 自动挡汽车档位介绍
  • SD卡
  • Java中的三大框架分别有什么用
  • DDR2是什么意思
  • FATFS(A)
  • 三星核S5PV210AH-A0 SAMSUNG
  • flash
  • RAM,ROM,NAND Flash,NOR Flash(A)
  • Android移植学习笔记
  • NRF24L01通信频率
  • 利用.bat(批处理)来删除KEIL编译生成的无用文件
  • SVC(STM32)
  • 深入了解以太坊
  • 2019.2.20 c++ 知识梳理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • css选择器
  • echarts花样作死的坑
  • happypack两次报错的问题
  • iOS编译提示和导航提示
  • laravel5.5 视图共享数据
  • Sass Day-01
  • spring学习第二天
  • 仿天猫超市收藏抛物线动画工具库
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 跳前端坑前,先看看这个!!
  • 听说你叫Java(二)–Servlet请求
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • ​你们这样子,耽误我的工作进度怎么办?
  • ![CDATA[ ]] 是什么东东
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (ZT)薛涌:谈贫说富
  • (搬运以学习)flask 上下文的实现
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)memcache、redis缓存
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • **PHP二维数组遍历时同时赋值
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net 4.0并行库实用性演练
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core跨平台微服务学习资源
  • .NET Standard 的管理策略
  • .NET 服务 ServiceController
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • [ C++ ] STL---仿函数与priority_queue
  • [20180224]expdp query 写法问题.txt
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured