一、低功耗定时器概述: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 在 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 章节,那才是最终权威。