STM32L4 中STOP2 模式下的漏电流 6 c3 J/ a7 [' R, I( _前言 STM32L4 系列,目前是STM32 超低功耗产品中最强大的一个系列。它还为我们提供了更多的低功耗模式的选择,包括STOP2 模式,包括低至30nA 的Shutdown 模式。对于这些模式,我们需要进行深入地了解,才能把它们用好。 问题 某客户在其产品的设计中,使用了STM32L476RGT6。客户在开发过程中,发现当进入STOP2 模式后,MCU 的电流保持在179.6uA,远大于数据手册中所描述的值:1.18uA (3V 工作电压 & 室温 & 无LCD & 无RTC)。 调研 1.了解问题4 j. R( u. U% Q6 j4 j# N 首先,我们先确认这个179.6uA 的电流真实存在,而且只是MCU 上的电流,不是整机电流。客户并没有使用LCD,也没有RTC,根据参考手册,在3V 的供电电压下,这个电流应该是1.18uA 左右,如下:( |( L/ @' D4 {) e1 G 目前所测的这个电流实在是太大了。7 C3 t% |3 S+ T9 A0 K& s $ k6 X9 v5 ^& @2 N" ^. D+ m 4 g) |" D. W- F5 B9 P" o6 _ 2.问题分析 根据代码和现象确认MCU 已经进入了STOP2 模式。那么,这个电流是如何产生的呢?初步怀疑是有输出口在对外输出电流。于是,找到电路图,对电路图进行了检查,客户的电路图并不复杂,没有很明显可能会导致往外输出电流的情况。 # T% }" _# R8 L- E 结合电路图,我们对I/O 口的状态进行了检测,最后发现MCU 的一个I2C 接口上的两根信号线电平为低!这要分成两种情况来看,一是这两个I/O 口被配置为输入口,那么它是对的,不会产生电流;另一种情况是,它仍然为I2C 功能的开漏输出口,那么这个情况下将会产生漏电流。所以,需要对代码进行检查。. }8 F& f* ?2 V% @ U+ _7 D- Q 3 K0 F: X, U! J; t* Z$ d 从电路图上来看,MCU 的I2C 接口,SCL 和SDA 两条线直接连接到外部器件,没有上拉电阻。所以,先检查I/O 配置,这两个口被配置为具有内部上拉的复用开漏功能模式,这是正确的配置,没有问题,使用了内部上拉电阻。但是,我们发现客户在进入STOP2 模式之前并没有对这两个口的配置进行更改,也就是说,它们仍然保持I2C 功能的开漏输出结构,带着内部5 o: n2 t7 j& n" O 上拉电阻。- S' B6 j* o0 h3 R# x* W3 p/ T% i 0 D- \! w, t2 D8 f$ J' q 但是,如果I2C 是在空闲状态下进入STOP2 模式,按道理,它们应该是保持在高电平。为什么两个引脚都是低电平呢?再检查用户代码,发现代码中将数据写入I2C 进行发送后,就直接进入STOP2 模式了。问题来了,如果进入STOP2 模式的时间点上,数据还在发送过程中,此时,若SCL 和SDA 都处于低电平的情况下,I2C 外设时钟停止,SCL 和SDA 的状态将被锁定在输出低电平状态上。我们使用示波器对此情况进行测试,发现确实如此,在进入STOP2 模式时,I2C 数据还在发送;处于STOP2 模式中,SCL 和SDA 保持为输出低电平;从STOP2 模式唤醒后,I2C 继续把剩下的bits 发完。 来看一下此时SCL 和SDA 的I/O 配置图:0 l- l) E% g; R 6 o% b& @, t w7 S 到此,这个问题基本就理清楚了:当I2C 在工作时,并在SCL 线和SDA 线上发送低电平时,N-MOS 被打开,电流从VDDIOx 经过上拉电阻流入I/O 口内部,经过N-MOS 流入VSS。若此时进入STOP 2 模式,由于Vcore 域的所有时钟停止,导致I2C 外设时钟停止,那么此I/O 状态被保持,将导致在STOP 2 模式下电流持续产生。0 Q% I6 l4 b$ }1 F- U$ |- z STM32L476 的内部上拉电阻为25~55 kΩ,标称值为40 kΩ ,3V 的工作电压,两个I/O 的上的电流大约是& N. x$ E7 V* _" u @ 3V/40 kΩ * 2= 150uA9 ]# ~7 z' [6 d, u) W 因为内部上拉电阻并非就是40 kΩ,所以我们测得到179.6uA 就是相当地正常了。! D) p: P% M) Q r( k $ J3 L; e0 H/ {! X3 a* X/ d . C: G/ ]$ A4 B9 y5 X: P7 w 3.问题解决 检查STM32L476 的参考手册RM0351,在STOP2 模式下的描述中,可以看到以下这一段话:& s( W' K n$ M$ `( F 意思是:所有在STOP2 模式下不能使用的外设,在进入STOP2 模式之前,必须在其外设本身清除相应的使能位来进行禁用,或者通过设置相应的位将其恢复到复位状态。" Y6 @7 H/ O% Z3 }4 @# y) y4 A% K 于是,需要对代码进行修改:在进入STOP2 模式之前,将I2C 外设进行复位,复位后将SCL 和SDA 两根线配置为输入上拉状态。为什么要配置为输入上拉呢?因为此I2C 在外部上没有上拉电阻连接,需要在STOP2 模式下保持这两个I/O 上有确定的电平,以避免其易受电磁干扰和额外的电流消耗。而这两个口工作中又作为I2C 接口,所以选择上拉电阻而不是下拉电阻。 & j) x$ D5 i# D! B# u, Z 修正后,再进行测试,可测得在STOP2 模式下的电流为1.0uA,与数据手册相符。8 i/ z( e+ Q# M* [% ~/ M S( x/ a& G% W( U 结论 由于在进入STOP2 模式之前没有对I2C 进行复位及I/O 口处理,导致在STOP2 模式中产生了漏电流。6 l/ j* i* a5 g- n1 A , r: c3 P/ o' U4 R- T6 G0 m 处理 在进入STOP2 模式下,请确保所有不相关的外设都已经被正确复位或禁用,并配置I/O 口为相应的正确结构。此种情况还容易发生在使用操作系统的应用中,因为多个任务的调度很容易让使用者在进入STOP2 模式时忘记对所有的外设进行检测。所以,在进入STOP2 模式前,请检查一下其他任务的工作情况,是否还有外设在传输数据还没传输完,是的话需要等待其结束,确保所有数据传输完成后,对外设进行复位或禁用,再进入STOP2 模式。 ) `/ T0 P/ ^7 @: L/ Y8 o1 t 6 W. ^# }% }) J& F2 Q- x' v, b4 V " @- e- @, i. h( p, I# W, { 文档下载* B z- H8 S9 M2 R) w$ R/ M ! A& R3 y( m$ d" h+ G$ @1 X 更多实战经验 |
基于STM32L4R9 的QuadSPI Flash 通讯速率不理想经验分享
STM32L4超低功耗功能概述
基于STM32L431RC Standby和RTC中断唤醒经验分享
基于STM32L431的睡眠模式经验分享
STM32L4R9 的 QuadSPI Flash 通讯速率不理想
STM32L4、STM32L4+和STM32G4系列 微控制器上的专利代码读取保护
STM32L433在STOP模式USART不能工作的解决办法
【实测教程】基于STM32L4系列的实测教程分享合集
STM32L4系列MCU的五种振荡器和使用说明
【实测教程】STM32CubeMX-STM32L4之研究串口通信(printf)
`/ i. I, y1 C
漏电不仅在MCU侧,还有远离MCU侧的,要综合考虑,而且还得涉及到电路板的改造。。。。 l' M* T5 \! ^& q