1.引言
STM32 L4 系列作为一款高性能的低功耗芯片,具有强大的运算处理性能和极低的运行和待机功耗,广泛应用于各种需要节能设备上。
2. 问题描述
客户使用 STM32L431 作为主控项目开发电子烟产品,使用了 ST 的 HAL 软件库开发。各种驱动功能正常。空闲时进入待机状态。在研发阶段测试时一切正常,但是批量生产时发现产品无法进入低功耗或者说表现为耗电过大。
3. 问题分析与定位
首先查找软件设计本身,包括各种外设的配置以及进入低功耗前的各种处理,并未发现任何异常,随即简化软件在评估板上烧录代码,然后连接电流表,功耗一切正常。经过多次验证,每次都能进入低功耗。
这样看起来就非常奇怪了,客户的硬件也没什么特殊地方。后来再次检查客户的整个流程发现,客户的烧录和测试是一直带电的,因为是电子烟产品,上面的电池是一直连接的。设计调查实验发现,客户的产品只要经过一次断电过程,再次上电就全部正常。而我们平时因测试低功耗电流需求,通常都是去掉烧录器的连接,避免额外电流消耗,所以都经过了断电过程,没有发现任何异常。而这种带有电池的产品,才会有机会发现。基于生产效率和产品终身带电池的特殊性,进行断电工序很难,不利于大规模生产。
那么问题来了,究竟是什么原因引起烧录完不能正常进入低功耗模式呢?带着问题进行查找原因。外设的查找比较容易,都是标准的并且简化掉了很多外设,那么会不会是传统外设之外的因素呢?
按照这个方向查找,想到了调试模块。
进一步查看发现烧录器将 DBG_STOP 位置 1。如上图。
如手册所描述,如果该位被置位的话,那么在低功耗下时钟并没有关闭,并且可以继续执行代码,所以芯片不能进入低功耗模式。于是对应的解决办法也出来了,进入低功耗前增加语句清除代码即可。
4. 问题解决
找到了线索后,针对问题解决起来就不复杂了,简单说,打一个补丁。
从调试界面上看,增加一句清除该位的函数即可禁止在低功耗模式下的调试功能,进而解决该问题。实际测量不需要断电也可正常进入期望的低功耗模式。
小结
由于低功耗调试位被置 1,引起超低功耗芯片 STM32L431 在不断电情况下不能正常进入低功耗模式,引起电流偏大。由于该产品特殊,从生产一直到用户手中,产品始终与电池连接(固定),才有可能导致此类问题发生,需要早研发阶段软件增加补丁的方式解决,使产品生产不用增加工序。
另外,笔者使用的 STM32 ST-LINK Utility 工具会引起该问题,而另一款常用的烧录软件 STM32CubeProgrammer v2.7.0 并未发现此问题,因此与用户采用的烧录软件有直接关系。市面上支持 STM32 低功耗产品烧录软件很多,如遇到此类问题,可以参考以上方式查找原因是否一致。
关键字:STM32L4 单片机 低功耗模式
引用地址:
STM32L4单片机无法进入低功耗模式的原因及解决方法
推荐阅读最新更新时间:2024-11-11 16:54
基于51单片机设计的呼吸灯
一、项目介绍 呼吸灯是一种常见的LED灯光效果,它可以模拟人类呼吸的变化,使灯光看起来更加柔和和自然。51单片机是一种广泛使用的微控制器,具有体积小、功耗低、成本低等优点,非常适合用于控制LED呼吸灯。本项目的呼吸灯将使用PWM(脉冲宽度调制)技术控制LED亮度,从而实现呼吸灯的效果。 在本项目中,将使用51单片机作为主控制器,通过编程实现呼吸灯的控制。将使用C语言编写代码,并使用Keil C51集成开发环境进行编译和调试。使用Proteus仿真软件进行电路设计和仿真,确保电路的正确性和稳定性。 二、设计原理 2.1 PWM技术 PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种通过改变脉冲
[单片机]
什么是单片机,单片机有什么用
什么是单片机,单片机有什么用?这是一个有意思的问题,因为谁也不能给出一个谁都认可的概念,那到底什么是单片机呢?单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机,其实这个概念也是不能使人认可的,反例就是DSP,ARM等处理器为什么不叫单片机呢?哈哈,其实没必要去找到明确的概念来解析什么是单片机,要想了解它,随便弄种单片机(最好是8051单片机)来搞个小项目,你就知道了什么是单片机。 现在高校的课程,只要专业跟电相关,就离不开单片机课程,而且大部分是8051系列的。学生在做相关课程设计时,写跟单片机相关论文是时,总喜欢把 单片机 作为关键词,这又设计到 单片
[单片机]
基于MCS-51单片机的流水灯功能设计与实现
今天,小编带大家一起来继续从基础做起,轻松玩转MCS-51单片机。这次主要实现的功能是:基于STC89C51单片机的流水灯功能设计与实现。如下图所示:下图为跑马灯电路(与单片机接口设置)。电路:1个LED光管点亮的电流值约为3~10mA,电阻值为1K。 电路通过编程后,可实现可以LED灯单个点亮或者实现流水灯功能、跑马灯功能等;(具体程序的话,可以自己是写一下)这里小编就写了一个实现流水灯的C源代码。大家也可以自己发散思维,让灯想怎么亮就怎么亮...有过自己动手的童鞋,肯定有过这样的感受:自己买的板板,用过一遍又一遍,但是每次都会变出点新花样出来,每次都是乐此不疲的写这代码,完全沉浸其中不可自拔....下图是具体功能实现时板
[单片机]
单片机试验四:认识数码管
玩单片机一定要玩转数码管了;上图是我们单片机试验板的四位数码管的截图照片;这个数码管怎样来显示1,2,3,4呢?别着急, 听我慢慢道来。 数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。 我们的试验板用的是四位8段的共阳极扫描型数码管。 什么是共阳极呢?就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的,由他们的位选位来控制哪一位的数码管来亮。 看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管哪一边亮。 动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O
[单片机]
51单片机学习之路(五)-万年历
写在前面:以下涉及到的程序及电路图不保证为最优方案,会存在很多不足之处,望谅解。另外,C51的内容是在整理很久之前所学的知识,可能会存在错误,欢迎指正。 正文 学习目标:利用51单片机在数码管上模拟时钟的功能。 学习内容: 在8位数码管上同时使用其中的3位并显示不同的数字、字母或字符 在数码管上模拟时钟的功能 程序一:数码管简单应用 本次所使用的数码管为8位共阴数码管 源程序 #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; #define display_duan P0 //定义数码管段选端口为P0 #define
[单片机]
基于51单片机的红外线遥控程序编写代码
#include reg52.h #define uchar unsigned char #define uint unsigned int unsigned char code smg_du ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code smg_we ={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; uchar irtime; uchar startflag; uchar irdata ; uchar bitn
[单片机]
基于单片机设计的的USB接口电路
主要芯片介绍 本设计采用控制芯片P89C61x2和接口芯片ISP1581实现USB接口电路的设计。 P89C61x2包含1024B RAM、64KB Flash存储器、32个I/O口、3个16位定位/计数器、6个中断源-4个中断优先级-嵌套的中断结构、1个增强型UART、片内振荡器和时钟电路。此外,器件的静态设计使其具有非常宽的频率范围,可选择1MHz~12MHz的晶体振荡器。具有两个软件可选的节电模式-空闲模式和掉电模式。 USB接口芯片ISP1581是一种价格低、功能强的USB接口器件,符合USB2.0规范,并为基于微控制器或微处理器的系统提供了高速USB通信能力;具有7个IN端点,7个OUT端点和1个
[单片机]
AT89S52单片机在洗衣机典型应用
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在洗衣机得到广泛应用。参考电路如下图所示:
[单片机]