时钟开关:不用的外设,把它的时钟关掉,省电!

短文标题: 时钟开关:不用的外设,把它的时钟关掉,省电!

你有没有想过一个问题:单片机里那么多外设(USART、SPI、I2C、TIM...),如果没用上,它们费电吗?费。 只要有时钟,外设电路就在工作------即使你没用它。省电的方法很简单:把它的时钟关掉。

**那个"时钟树"的分层(对应教程2.6节),**ARM32的时钟树分三层:

  • AHB:CPU、内存、DMA、SDIO、FSMC...
  • APB2:SPI1、USART1、ADC1、GPIOA-E、TIM1/8...
  • APB1:USART2/3、I2C1/2、SPI2/3、TIM2-7、WWDG、PWR...

每层总线上挂着不同的外设。每个外设都有自己的时钟开关。

**那个"时钟使能"寄存器(对应教程2.7节),**RCC(复位与时钟控制)模块提供了时钟使能寄存器:

  • RCC_AHBENR:AHB总线外设时钟使能
  • RCC_APB2ENR:APB2总线外设时钟使能
  • RCC_APB1ENR:APB1总线外设时钟使能

每个外设占用一个bit。

// 使能USART1时钟(APB2)

RCC->APB2ENR |= RCC_APB2ENR_USART1EN;

// 关闭USART1时钟

RCC->APB2ENR &= ~RCC_APB2ENR_USART1EN;

一个bit,控制一个外设的"死活"。那个"默认"的状态 ,复位后,大部分外设的时钟是关闭 的。这就是为什么教程中强调:**使用外设前,必须先使能它的时钟。**不使能时钟,写寄存器没用------因为外设根本没通电(时钟不通)。

__HAL_RCC_USART1_CLK_ENABLE(); // HAL库写法

这是初学者最容易忘的一步。那个"功耗"的账 ,一个外设的电流可能只有几百μA到几mA。但多个外设加起来,功耗可观。电池供电的设备(如手环、传感器),每个μA都要精打细算。不用的外设,时钟关掉------零成本省电。

那个"调试"时的注意, 调试时如果把某个外设的时钟关了,但代码还在读写它的寄存器。结果:总线一直等待,程序卡死(或进HardFault)。关闭时钟前,确保该外设已不再使用。那个"低功耗模式"的配合, 进入STOP模式前,硬件会自动关闭大部分外设的时钟。但从STOP唤醒后,时钟恢复,外设状态保持。如果你在STOP前关了时钟,唤醒后要重新使能。低功耗设计,时钟管理是基本功。

这个故事的启示, 为什么外设不用时要关时钟?因为只要有时钟,电路就在切换电平,就在耗电 。时钟关了,电路静态,功耗几乎为0。不用的外设,别给它"通电"(时钟)。

写在最后, 下次你写代码,初始化外设前,检查一下时钟使能了吗?结束后,如果不再用了,把时钟关掉。一个bit,省电从细节做起。


(本文灵感源于于振南《新新概念ARM32单片机》教程第2.6节"总线架构与时钟分层"和第2.7节"时钟开关:外设功耗的控制",感谢作者将低功耗设计的底层逻辑讲得如此通透。)


如果您觉得这个故事对您有启发,欢迎点赞、转发,让更多工程师看到这个藏在时钟开关背后的"省电"智慧。

相关推荐
Szime3 小时前
全球首创10位40GSPS超宽带ADC选型参考:国产超高速ADC深智微科技选型支持
科技·单片机·嵌入式硬件·fpga开发
(Morgan)4 小时前
51单片机期末复习知识点总结
stm32·单片机·嵌入式硬件
榴莲llll6 小时前
应用于计时器/微波炉等产品的高亮LED数显驱动VK16K33C 数码管屏显驱动芯片
单片机
华一精品Adreamer7 小时前
T606 vs 骁龙662/RK3566:主流安卓+4G定制平板芯片横向测评指南
单片机
Zyed7 小时前
[STM32]Day9-Part1USART+串口接收+串口收发
stm32·单片机·嵌入式硬件
小慧10249 小时前
手动建立工程模板
stm32·单片机
嵌入式ZYXC10 小时前
STM32烧录一次后无法再次烧录的两种原因
stm32·单片机·嵌入式硬件
踏着七彩祥云的小丑11 小时前
嵌入式测试学习第33 天:压力测试、反复开关机、反复插拔接口测试
单片机·嵌入式硬件·学习
布子麟12 小时前
NodeMcu(ESP8266)之更新固件
单片机·物联网·iot
开发笔记-阿牛12 小时前
CK6159A 可靠性测评:芯片工艺、环境测试与量产稳定性分析
stm32·单片机·嵌入式硬件