STM32F030C8T6 STOPMODE低功耗设计经验分享_stm32f030 pwr_wakeup_pin1-程序员宅基地

技术标签: stm32  敏捷开发  嵌入式  单片机  gpio  

STM32F030C8T6 STOPMODE低功耗设计经验分享

最近做了一个项目,由锂电池供电,用到了STM32F030的低功耗设计,经过对比选择了STOP模式,用按钮中断唤醒,

void enter_stop_mode(void)//进入停止模式
{
    
	SysTick->CTRL = 0x00;//关闭定时器
    SysTick->VAL = 0x00;//清空val,清空定时器	
	OLED_Clear();	
	OLED_Display_Off();	
	TIM_Cmd(TIM2, DISABLE);
	TIM_Cmd(TIM3, DISABLE);
	TIM_CtrlPWMOutputs(TIM2, DISABLE);	                    //PWM输出关	
	ADC_Cmd(ADC1, DISABLE);	        						//失能ADC
	I2C_Cmd(I2C1, DISABLE);//失能IIC	
	EXIT_KEY_Init();//配置外部中断	
	PowerSW_Init();
 	PowerSW_ON();   //关外围电源		
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE);//开电源管理时钟
	PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

第一次程序运行后电流为2mA左右,然后开始一点点查电流,先将用到的端口设为输出并根据负载电路的不同设了上拉或下拉,通电后电流还是2mA左右,没有任何变化,改为输入也没有降低。后来试了进入STANDBYMode模式,因为这个模式所有的外设端都停止工作的,并且是高阻状态

	PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);  //使能唤醒管脚功能
	PWR_ClearFlag(PWR_FLAG_WU);
    PWR_EnterSTANDBYMode();   //进入待机(standby)模式   

此时电流一下降到了450uA,太兴奋了!。由于WAKEUP口未引出,无法唤醒,还是用不了这个模式只能用STOP模式,只能再查原因。那对比前面的端口设置猜想电流肯定时从某个端口漏掉的,只是我没关掉,于是将所有端口都设为模拟模式并进入STOP模式测试,只留了中断引脚

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);	
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;												   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOF, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //中断引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; 
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

此时电流直接为500uA,于是每个端口单独关闭,看到低是那个端口漏的电流,结果才发现是A1口,这个口之前作ADC采样口的,之前想着关闭了ADC应该不会有电流了,并没有把它设为高阻态,谁想它这边漏了1.5mA。我又将没用到的端口CDF全设为高阻态,电流又降到450uA,这边就很奇怪,明明这些端口都没有接负载,都是悬空的,但还是有50uA漏掉了。
在这里插入图片描述

450uA还是有点高,我在外设电源处加入了一个MOSFET开关,所有外设电源由VCCSW提供,进入STOP模式时将外设电源全部关闭在这里插入图片描述

再测试电流降为10uA,其本达到设计要求了,用300mAH的锂电池供电,10uA待机电流理论上可以用3年。

结论:低功耗设计中,虽未用到的端口未接负载,但仍要设为模拟状态(端口为高阻态),其它设输入输出上下拉都没用。STANDBYMode模式默认端口全部设为高阻状态,不需单独设,但STOP模式要程序中设置。
由于是锂电池供电,在正常运行中电流也希望尽可能小,我在测试时发现运行电流在20~50mA之前变动,且没有规律,后来查找终于发现问题出在蜂鸣器控制回路,其驱动电路如下:
在这里插入图片描述
LS61为无源蜂鸣器,BEEP引脚由TIM2通道的PWM控制,程序中判断响时时长够了就停止TIM2,这样设计看似没问题,但就是这个原因导至电流增大了一倍。原因就是BEEP输出的是PWM信号,高低电平按设定的频率交替变化,但是当停止TIM2时,这个高低电平是随机的,有时候是高电平,这时Y1是导通的,而TIM2又停止了,不会再转为低电平,BEEP-R61-Y1-GND这个回路就一直是导通的,这就造成了电流白白浪费,后来在程序中加入判断语 句,当响时时长够且PWM输出低电平时才停定时器,再测试电流一直在20mA左右,再没有到过50mA,说明问题根本解决了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tency2018/article/details/108482270

智能推荐

Oauth2 实现短信验证码登陆_oauth2.0 手机账号验证码登录-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏8次。一. 背景最近在学习并使用SpringSecurty Oauth2, 已经实现账号密码的授权登陆, 需要新增一个手机号验证码的授权登陆.在翻阅大量文章, 发现实现方式都比较复杂, 大部分是自己写filter和拦截器来做处理. 代码量较大, 而且不利于阅读跟扩展.经过一整天的学习和探索, 大概明白Oauth2四种场景的授权流程, 又恰好有幸看到某一个大神的文章, 给予启发: https://www.appblog.cn/2019/10/09/Spring Security Oauth2 中优雅的扩展自定_oauth2.0 手机账号验证码登录

计算机毕业设计springboot校园学生健康管理与服务系统29o2z9【附源码+数据库+部署+LW】_springboot做校园健康管理系统代码-程序员宅基地

文章浏览阅读128次。选题背景:随着社会的发展和人们生活水平的提高,对于学生健康管理与服务的需求日益增加。在校园中,学生面临着课业压力、心理问题、营养不良等多种健康风险,这些问题直接影响着学生的学习效果和身心健康。因此,建立一个校园学生健康管理与服务系统,成为了当今教育领域亟待解决的问题。选题意义:首先,校园学生健康管理与服务系统能够提供全面的健康管理服务,帮助学生及时了解自己的身体状况和健康问题,并提供相应的解决方案。通过定期体检、健康评估和个性化的健康指导,学生可以更好地掌握自己的身体状况,预防疾病的发生,提高学习效_springboot做校园健康管理系统代码

百炼 2980 大整数乘法_练习题 口用大整数乘法:计算7479和9986的乘积,要 求写出具体的计算步骤。-程序员宅基地

文章浏览阅读1.9k次。2980:大整数乘法查看提交 统计 提问 时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积。 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 123456789009876_练习题 口用大整数乘法:计算7479和9986的乘积,要 求写出具体的计算步骤。

ImgURL一款简单纯粹的图床程序源码_imgurl图床源码-程序员宅基地

文章浏览阅读2.8k次。介绍:ImgURL是继XZ Pic之后xiaoz的另一款图床程序,依然保持以往简洁风格,在XZ Pic基础上完善了UI,增加了部分实用的功能。ImgURL初衷并不是提供图片存储,而是让图床多一个选择,我坚信图片放在自己手中更安全。功能与特色:拽拖上传,自动生成连接,一键复制。图片预览与探索基本的图片管理支持TinyPNG图片压缩环境要求:PHP >= 5.6需要exif函数支持安装:访问:下载最新版ImgURL程序,放到您的站点根目录并解压。修改一下config.php设置你自己_imgurl图床源码

小程序:ble蓝牙连接_蓝牙ble模块连小程序-程序员宅基地

文章浏览阅读414次。1.定义数据变量 bleList: [], deviceId: '', //设备蓝牙deviceId services: '', //蓝牙的uuid notifyId: '', //开启notify接收 writeId: '', //接收写入的值2.初始化蓝牙 initBlue() { wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口 success: (res)=>_蓝牙ble模块连小程序

“苹果光环”褪色后,瑞声靠什么坐稳头把交椅?_旭日大数据直播-程序员宅基地

文章浏览阅读1.9k次。文|螳螂观察(TanglangFin)作者|图霖苹果背后的零部件供应商,向来不缺关注度,瑞声科技便是其中之一。1997年,因“捡漏”日本某公司微型喇叭订单,瑞声科技与摩托罗拉达成合作。摩托罗拉鼎盛时期,恰逢国内手机市场进入高速发展期。得到摩托罗拉认可后,瑞声科技在国际市场开始展露头角,先后拿下了多家高端通信公司的订单。早期的名声积累为瑞声和苹果的合作埋下了伏笔。2010年,苹果手机史上“巅峰之作”iPhone4登场,被选定为供应商的瑞声科技也因此一夜爆红。其后一年,瑞声科技又将三星手机这.._旭日大数据直播

随便推点

echarts学习总结(二):一个页面存在多个echarts图形,图形自适应窗口大小_echarts会出现两个-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏23次。如上图所示一个页面有两个echarts图形:散点图和折线图,如果还写为 myChart.setOption(option); window.onresize = myChart.resize; 则只有一个图形可自适应窗口大小,另外一个则不能随窗口大小而改变图形大小,解决办法为在每一个echarts图形页面将上面代_echarts会出现两个

前端常见跨域解决方案(全)_.substring(1, json.stringify(res.data.data[1].path-程序员宅基地

文章浏览阅读79次。什么是跨域?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域:1.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入: <link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链3.) 脚本请求: js发起的aja..._.substring(1, json.stringify(res.data.data[1].pathdata).length - 1)

在非admin页面使用 Django Ueditor_ueditor 不是admin 不能编辑-程序员宅基地

文章浏览阅读386次。Django Ueditor的安装和在admin页面的使用请看,接下来的内容是基于这篇文章的环境进行的:如何使用 Django Ueditor,如果你按照下面的流程来做还有关于Ueditor的报错,很有可能是没有装好环境。。总体流程以文章模型为例1、创建文章模型2、创建该文章模型的Form3、写个html界面4、写个视图函数article(),并提供这个Form给前端渲染5、..._ueditor 不是admin 不能编辑

计算机控制系统顾树生课后答案,清华大学出版社-图书详情-《自动控制原理习题详解》...-程序员宅基地

文章浏览阅读222次。信息化时代的到来,为自动控制技术的应用开拓了更加广阔的空间。作为有关自动控制技术的基础理论——自动控制原理,已成为各高校许多学科和专业必修的技术基础课。深入理解和掌握《自动控制原理》中主要内容,无论是对自动控制理论的进一步学习,还是为后续专业课的学习打下理论基础,都是非常关键的。我们编写的教材《自动控制原理》(杨自厚主编,冶金工业出版社出版),自1980年出版以来,经历了几次修订: 1987年修订..._自动控制原理教材答案清华大学版

ie不能加载flash html,ie浏览器flash无法加载怎么修复_win7系统ie浏览器flash加载不了如何解决-系统城...-程序员宅基地

文章浏览阅读1.1k次。2017-08-09 15:30:18  浏览量:242相信很多win8用户都遇到过flash插件加载失败的情况,win8加载flash插件失败怎么办?大部分情况下用户都会选择重新安装一遍flash,可是这样比较麻烦,有什么不用重装也能解决加载flash失败的方法呢?下面由小编跟大家介绍win8加载flash失败的解决方法。2016-11-29 15:56:15  浏览量:2703Win7系统在使..._win7系统flashplayer组件无法修复,ie无shockwave

Python 技术篇-pip版本查看和升级_新版本pip说明-程序员宅基地

文章浏览阅读6w次,点赞14次,收藏31次。pip show pip查看pip版本,下面还提示安装命令和pip可以升级到的最新版本。python -m pip install --upgrade pip升级我们的pip安装完成!_新版本pip说明

推荐文章

热门文章

相关标签