一、低功耗定时器概述:LPTIM 在 STM32L4 系列中的定位

各位同学,咱们今天正式开始聊低功耗定时器。我最早接触 LPTIM 是在一个电池供电的温湿度采集项目上。当时产品要求一节 CR2032 纽扣电池撑两年,普通定时器一开,功耗直接飙到毫安级,根本没法用。后来换了 LPTIM,问题才解决。

说白了,LPTIM 就是 STM32L4 里专门为低功耗场景设计的定时器。它能在芯片深度睡眠时继续工作,功耗却只有微安级别。你想想看,普通定时器在睡眠模式下基本就停了,但 LPTIM 不一样——它有自己的时钟源,独立于主系统时钟。

LPTIM 与普通定时器的区别

我整理了一个对比表,这样看得更清楚:

对比项 普通定时器(TIM) 低功耗定时器(LPTIM)
时钟源 系统时钟(HSI/HSE/PLL) LSE/LSI/HSI16 等低功耗时钟
工作模式 仅在 Run/Sleep 模式工作 支持 Stop/Standby 模式
典型功耗 几百 μA ~ 几 mA 几百 nA ~ 几 μA
计数位数 16 位或 32 位 16 位
输出能力 多通道 PWM/捕获/比较 单通道 PWM/捕获
唤醒能力 不支持深度睡眠唤醒 支持从 Stop/Standby 唤醒

核心差异一句话总结:普通定时器追求性能和功能丰富,LPTIM 追求极低功耗下的持续运行能力。

典型应用场景

我在实际项目中用过 LPTIM 做三件事,也是咱们课程后面会重点讲的:

1. RTC 唤醒的替代方案

很多人一提到定时唤醒就想到 RTC。但 RTC 的唤醒间隔最小是 1 秒,而且配置起来稍麻烦。LPTIM 可以做到毫秒级甚至微秒级唤醒。我记得有个项目需要每 100ms 采集一次传感器数据,用 RTC 根本做不到,LPTIM 轻松搞定。

2. 脉冲计数

LPTIM 有外部输入引脚,可以在睡眠模式下对脉冲信号计数。比如水表、气表这类需要累计流量的设备,主芯片大部分时间睡觉,LPTIM 默默数脉冲,数到阈值再唤醒主控处理。功耗能压到 1μA 以下。

3. 低功耗 PWM 输出

有些场景需要在低功耗状态下输出一个固定频率的 PWM 信号,比如驱动 LED 呼吸灯或者给外部电路提供时钟。普通定时器一睡就停,LPTIM 可以继续输出。我做过一个电子标签项目,待机时用 LPTIM 输出 32kHz 的 PWM 给升压电路,整机功耗才 3μA。

个人经验:刚开始用 LPTIM 时容易犯一个错——忘记配置 LSE 时钟的驱动能力。LSE 默认驱动偏弱,如果外部负载电容不匹配,LPTIM 可能跑不起来。建议先拿示波器确认 LSE 波形是否正常。

LPTIM 在 STM32L4 时钟树中的位置

下面这张图是我自己画的,帮你理解 LPTIM 的时钟来源和系统关系:

LPTIM 时钟树与系统关系图 时钟源 LSE (32.768kHz) LSI (~32kHz) HSI16 (16MHz) 时钟选择器 (LPTIM_CFGR.CKSEL) LPTIM 外设 16位计数器 预分频器 系统模式 Run / Sleep Stop 0/1/2 Standby 唤醒信号输出 外部事件输入 关键说明: 1. LPTIM 在 Stop/Standby 模式下仍可运行,这是它与普通定时器的本质区别 2. 时钟源选择影响功耗和精度:LSE 最准但启动慢,LSI 省电但精度差 3. 外部事件输入可在睡眠状态下触发 LPTIM 复位或捕获 4. 唤醒信号可配置为比较匹配或外部事件触发

注意:LPTIM 在 Standby 模式下只能使用 LSE 或 LSI 作为时钟源。HSI16 在 Standby 模式下会被关闭。我曾经因为这个排查了整整两天,最后发现是时钟源选错了。

LPTIM 的硬件资源

STM32L4 系列不同型号的 LPTIM 数量不同。我列个常见型号的配置:

型号 LPTIM 数量 LPTIM 实例 备注
STM32L431 2 LPTIM1, LPTIM2 基础配置
STM32L452 2 LPTIM1, LPTIM2 与 L431 相同
STM32L496 3 LPTIM1, LPTIM2, LPTIM3 多一个用于复杂场景
STM32L4R5 3 LPTIM1, LPTIM2, LPTIM3 高性能系列

每个 LPTIM 都包含:

  • 16 位向上计数器
  • 可编程预分频器(1/2/4/8/16/32/64/128)
  • 比较寄存器(用于产生中断或唤醒)
  • 自动重载寄存器
  • 外部触发输入
  • 单通道 PWM 输出

选型建议:如果你的项目只需要一个低功耗定时器做唤醒,L431 就够用。如果需要同时做唤醒和脉冲计数,建议选带两个 LPTIM 的型号,各司其职。

小结

这一章咱们把 LPTIM 的定位、区别、场景和硬件资源都过了一遍。核心就一句话:LPTIM 是 STM32L4 低功耗设计的基石外设。后面几章我会带大家从寄存器配置开始,一步步写出能用的低功耗定时器程序。

嗯,先消化这些。有问题随时翻翻参考手册的 LPTIM 章节,那才是最终权威。