1. 项目概述为什么LPC2361/62的时钟与功耗设计值得深究如果你正在用或者考虑用NXP的LPC2361/62系列MCU做项目尤其是那些对功耗有严苛要求的电池供电设备、便携式仪器或者需要长时间待机的物联网节点那么你大概率绕不开它的时钟系统和低功耗模式。这俩兄弟LPC2361和LPC2362虽然是十几年前的老将但凭借其ARM7TDMI-S内核和丰富的外设至今仍在许多工业控制和低功耗场景中服役。我当年第一次用这芯片做野外数据采集器时就被它的功耗表现惊艳到了——在深度掉电模式下整个核心系统电流能降到20微安级别仅靠一颗纽扣电池就能让实时时钟RTC和关键数据保持数年之久。但说实话官方数据手册Datasheet里关于时钟和功耗控制那几十页内容读起来就像一本晦涩的说明书各种缩写PLL、CCLK、PCLK和模式Idle、Sleep、Power-down交织在一起初次接触很容易懵。很多人可能就照着例程配置一下主频就完事了但真正要榨干它的性能潜力同时把功耗压到极限就必须把时钟树和功耗模式这套组合拳吃透。这篇文章我就结合自己踩过的坑和项目经验把LPC2361/62的时钟系统与低功耗模式设计掰开揉碎了讲清楚目标就是让你看完后不仅能配置更能理解为什么这么配置以及如何根据你的应用场景做出最优选择。2. 时钟系统核心架构与设计逻辑拆解LPC2361/62的时钟系统远不止是给CPU提供一个“心跳”那么简单。它是一个高度可配置、分层管理的能源枢纽直接决定了系统性能的上限和功耗的下限。理解它的设计逻辑是进行任何低功耗优化的前提。2.1 三大时钟源各司其职的“心脏”芯片内部集成了三个独立的振荡器你可以把它们想象成三个不同特性和功耗的“心脏”。1. 内部RC振荡器IRC这是芯片的“安全心脏”和“启动心脏”。上电或任何复位后MCU默认使用IRC运行。它的频率是4 MHz精度经过校准后能达到±1%。这个精度对于UART通信等对时钟精度要求不高的外设来说足够了但对于USB或高精度定时器就不行。IRC的最大优势是启动快、无需外部元件、功耗相对较低。在低功耗设计中它常作为从深度睡眠中快速唤醒后的临时时钟源让代码先跑起来然后再从容地启动更稳定但启动慢的主振荡器。2. 主振荡器Main Oscillator这是系统的“高性能心脏”。它需要外接一个1MHz到25MHz的石英晶体或陶瓷谐振器当然也可以直接输入外部时钟信号。通过它我们可以获得一个非常稳定、精确的时钟源。更重要的是它是驱动锁相环PLL的“原料”。在需要较高运行频率比如跑到72MHz时就必须启用主振荡器。它的缺点是启动需要时间由唤醒定时器控制并且功耗比IRC要高。3. RTC振荡器这是系统的“永动心脏”。顾名思义它主要服务于实时时钟RTC模块通常外接一个32.768kHz的钟表晶体。这个频率经过分频后正好可以产生1秒的时钟信号。它的核心价值在于极低的功耗和独立供电域。即使整个主系统掉电只要VBAT引脚有电比如接了个纽扣电池这个振荡器和与之关联的2KB电池RAM就能一直工作。这意味着你的设备可以完全关机但时间和关键数据不会丢失。它也可以作为看门狗WDT或甚至PLL的时钟源但这在低功耗场景下不常见。设计逻辑思考为什么要有三个这是为了在性能、精度、功耗和成本之间提供灵活的权衡。IRC保证了芯片在任何情况下都能自力更生启动主振荡器提供了高性能的基石RTC振荡器则专为“永生”的低功耗守夜任务而设计。你的初始化代码本质上就是在合适的时间点在这三颗“心脏”之间进行切换和协同。2.2 锁相环PLL频率的“涡轮增压器”光有振荡器还不够对于ARM核来说4MHz或12MHz的晶体频率太低了。这时就需要PLL出场。你可以把它理解为一个频率的“涡轮增压器”或“变速齿轮箱”。PLL的工作流程分为三步分频N- 倍频M- 再分频输出分频。官方手册的公式有点绕我把它翻译成更易懂的步骤和计算过程输入分频N值PLL的输入时钟PLLCLKIN可以来自IRC、主振荡器或RTC振荡器首先被除以NN1到256。这一步的目的是将输入频率调整到一个适合后续倍频电路工作的范围。例如如果你的主晶振是12MHz设置N12那么进入倍频环节的频率就是1MHz。倍频M值与CCO这是核心环节。分频后的信号驱动一个电流控制振荡器CCO将其频率乘以MM1到32768。CCO会努力振荡在一个很高的频率上范围必须在275MHz到550MHz之间。这是硬性规定超出会不稳定甚至损坏。倍频后的信号再被除以M然后与最初的输入分频信号进行相位比较产生的误差信号去微调CCO最终锁定在一个既高频又稳定的状态。CPU时钟CCLK生成锁定的CCO高频信号比如400MHz并不能直接给CPU用太高了。需要再经过一个固定的分频器通常是2、4、8等具体由PLLCFG寄存器控制产生最终的CPU时钟CCLK。CCLK必须满足芯片的最大频率限制LPC2361/62是72MHz。实操中的计算示例 假设我们使用12MHz的外部晶体目标CPU频率CCLK为60MHz。第一步选择PLLCLKIN 12MHz。第二步设定输入分频N12则进入倍频器的频率为Fin 12MHz / 12 1MHz。第三步我们需要CCLK60MHz。假设PLL输出到CPU的固定分频为2即PLL输出频率 CCLK * 2那么PLL需要输出的频率就是120MHz。第四步计算M值。因为CCO频率Fcco Fin * M * 2这里的2是PLL的一个固定乘数因子详见参考手册。我们需要Fcco在275-550MHz之间。如果我们设M60则Fcco 1MHz * 60 * 2 120MHz。等等这只有120MHz低于275MHz的最低要求第五步调整。这说明我们的Fin太低了。我们需要提高Fin。尝试减小N值。设N6则Fin 12MHz / 6 2MHz。再设M30则Fcco 2MHz * 30 * 2 120MHz依然不够。第六步正确计算。实际上公式应为Fcco Fin * M * 2且Fcco必须在275-550MHz。为了得到CCLK60MHz假设后分频为2需要Fcco120MHz这直接违反了Fcco的最低要求。因此CCLK60MHz时Fcco至少是60MHz * 2 120MHz不对后分频可能不是2。查阅更详细的用户手册发现LPC2000系列的PLL输出后还有一个可编程分频器PLL输出分频值P通常为2、4、8…。更通用的关系是CCLK (Fcco) / (2 * P)。我们必须先满足Fcco在275-550MHz。让我们重新设定目标Fcco取一个中间值比如400MHz。设定后分频P4则CCLK 400MHz / (2*4) 50MHz。已知晶体Fosc12MHz设定N12则Fin 1MHz。需要Fcco Fin * M * 2 400MHzM 400MHz / (1MHz * 2) 200。检查M200在1-32768范围内Fcco400MHz在275-550MHz范围内。CCLK50MHz在芯片能力内。所以最终配置为N12 M200 P4。得到CCLK50MHz。关键提示实际编程时NXP提供了完善的库函数和计算工具如LPCToolbox我们不需要手动算这么复杂。但理解这个过程至关重要因为当你的系统不稳定如USB无法工作因为需要精确的48MHz时钟或想微调功耗时就知道该调整哪个参数了。一个必须遵循的流程是配置PLL - 等待PLL锁定查询PLLSTAT寄存器- 将系统时钟源切换到PLL输出。直接切换会导致系统崩溃。2.3 外设时钟PCLK与分频器精细化的功耗管理拿到了CCLK还没完。芯片上的每个外设UART、SPI、定时器等并不是都必须跑在最高的CPU频率下。让一个低速的UART跑在72MHz下纯属浪费电。因此LPC2361/62为大部分外设都配备了独立的时钟分频器。PCLK外设时钟通常由CCLK分频得到。你可以为每个外设或一组外设选择不同的分频值如1, 2, 4, 8…。这意味着你可以让CPU高速处理数据同时让串口以较低的频率运行从而节省动态功耗。在低功耗设计中一个常见的技巧是在初始化时将所有不用的外设时钟直接关闭通过PCONP寄存器对于正在使用但性能过剩的外设将其PCLK分频到能满足功能的最低频率。3. 四大低功耗模式深度解析与实战配置理解了时钟的来源和分配我们就能真正驾驭LPC2361/62的低功耗模式了。这四种模式不是简单的“省电”而是针对不同场景的、有精细代价的“休眠策略”。3.1 空闲模式Idle Mode这是最“浅”的睡眠。当你执行完WFI等待中断指令后CPU内核停止取指执行时钟在ARM核内部被门控关闭。但是所有外设的时钟PCLK依然在运行中断控制器、DMA、定时器、串口等都照常工作。功耗表现省去了CPU核心、以及与核心紧密相关的内存总线的功耗。整体电流相比正常运行会有显著下降具体下降多少取决于你开启的外设多少。唤醒方式任何中断外部中断、定时器中断、串口中断等都可以唤醒它。唤醒后CPU从WFI指令之后的下一条指令开始执行几乎无延迟。应用场景处理突发性、事件驱动的任务。比如一个数据采集器大部分时间在等待传感器准备好或等待通信指令这时就可以进入Idle模式。一旦中断到来CPU立刻满血复活处理处理完继续Idle。这是最常用、最简单的低功耗手段。配置代码示例基于CMSIS风格// 进入空闲模式 void Enter_Idle_Mode(void) { // 确保所有必要的中断已使能如外部按键、定时器、串口等 NVIC_EnableIRQ(EXTINT0_IRQn); // 示例使能外部中断0 // 执行WFI指令CPU进入空闲模式 __WFI(); // 被中断唤醒后程序从这里继续执行 } // 在对应的中断服务函数中无需特殊操作正常处理即可。3.2 睡眠模式Sleep Mode睡眠模式比空闲模式更进一步。除了CPU停止系统时钟源也就是给PLL和大部分外设提供根源的时钟也会被关闭。这意味着主振荡器、IRC、以及由它们驱动的PLL都会被关闭。整个芯片内部的主要时钟网络都停止了。功耗表现大幅降低因为动态功耗的主要来源——时钟翻转被停止了。只有少数没有时钟也能工作的模块如基于32kHz RTC的唤醒逻辑、部分IO口的状态保持电路和静态漏电存在。唤醒方式只能由特定的、不需要系统主时钟就能工作的唤醒源触发比如外部中断某些引脚具有异步唤醒功能、RTC闹钟中断、看门狗中断等。注意从睡眠模式唤醒是一个“冷启动”时钟的过程。如果之前用的是主振荡器PLL唤醒后需要重新配置并等待时钟稳定。唤醒延迟如果睡眠前用的是IRC唤醒后等待约4个IRC周期~1us即可恢复执行。如果睡眠前用的是主振荡器唤醒后需要等待4096个主振荡器周期。对于12MHz晶振就是~341us。在这段等待时间里CPU是用IRC临时运行的所以你的唤醒中断服务程序ISR和后续初始化代码要考虑到此时时钟可能不是你想要的主频。配置代码示例void Enter_Sleep_Mode(void) { // 1. 配置唤醒源例如使能一个具有异步唤醒功能的外部中断引脚 SCB-SCR | SCB_SCR_SLEEPDEEP_Msk; // 设置SLEEPDEEP位准备进入深度睡眠Sleep或Power-down // 更精确的控制需要通过芯片特定的电源控制寄存器PCON进行 // 对于LPC23xx通常直接操作PCON寄存器 // 假设我们使用EXTWAKE寄存器配置外部唤醒 EXTWAKE (1 0); // 使能P0.0作为唤醒引脚具体引脚需查手册 // 2. 确保所有数据已保存外设进入安全状态如关闭ADC、清理通讯缓冲区 // 3. 执行WFI指令进入睡眠模式 __WFI(); // 4. 唤醒后系统时钟可能已复位到IRC。需要重新初始化主时钟。 SystemInit(); // 这个函数需要你自己实现包含PLL和时钟树的重新配置 // 或者如果你在进入睡眠前保存了时钟配置这里可以恢复。 }3.3 掉电模式Power-down Mode这是比睡眠模式更极端的省电模式。在睡眠模式的基础上掉电模式进一步关闭了内部RC振荡器IRC和Flash存储器。功耗表现电流进一步降低达到手册中给出的“Power-down mode”典型值约113μA具体看温度和电压。因为Flash被断电其静态功耗也被消除。唤醒方式与睡眠模式类似只能由外部中断、RTC闹钟等异步唤醒源唤醒。唤醒延迟与流程重点这是最容易出问题的地方。唤醒过程比睡眠模式更长、更复杂唤醒事件发生。IRC重新上电启动这个过程需要约60μs。IRC启动后等待4个IRC周期~1μs如果代码在RAM中运行此时可以开始执行。同时Flash唤醒定时器开始用4MHz的IRC计数等待Flash存储器完全准备好典型需要100μs。当Flash就绪后CPU才能安全地从Flash中取指执行。这意味着如果你的代码全部在Flash中从唤醒到第一条指令执行至少有60us 100us 160us的延迟。如果你的唤醒中断服务程序ISR非常简短且对时序要求极其苛刻就需要将这段ISR代码拷贝到RAM中运行以避开Flash的启动时间。配置注意事项进入掉电模式前必须处理好所有外设的状态因为时钟全没了。唤醒后的初始化代码必须包含完整的时钟系统初始化PLL、分频器等。如果使用RTC唤醒务必确保VBAT引脚有电且RTC已正确配置。3.4 深度掉电模式Deep Power-down Mode这是终极省电模式。在掉电模式的基础上它甚至关闭了芯片内部的电压调节器。除了由VBAT引脚独立供电的RTC振荡器和那2KB电池备份RAMBattery RAM外芯片其他部分几乎完全断电没有任何状态保留。功耗表现电流降至最低手册典型值在20μA左右。这基本上就是RTC电路和电池RAM的维持电流。唤醒方式只有两种——外部复位RESET引脚和RTC闹钟中断。注意由于内部逻辑完全断电用RTC闹钟唤醒实际上相当于一次硬件复位程序会从复位向量地址0开始执行所有寄存器恢复到默认值。数据保存策略这是深度掉电模式的关键。因为主SRAM和寄存器内容全部丢失任何需要持久化的数据如系统状态、采集的数据、配置参数必须在进入深度掉电前保存到那2KB的电池备份RAM中。唤醒复位后程序首先要做的事情就是从电池RAM中恢复这些数据。配置与流程示例// 进入深度掉电模式前的准备 void Prepare_For_DeepPowerdown(void) { // 1. 保存关键数据到电池备份RAM (地址通常为0xE0088000开始) uint32_t *battery_ram (uint32_t*)0xE0088000; battery_ram[0] critical_data1; battery_ram[1] critical_data2; // ... 确保不超过2KB // 2. 配置RTC闹钟假设在10秒后唤醒 RTC_SetAlarm(time_now 10); // 3. 确保所有外设处于安全状态通常已无法访问 // 4. 设置深度掉电模式并触发进入通过PCON寄存器 PCON | 0x02; // 设置DPD位具体位需查手册 // 执行一个特定的指令序列通常见应用笔记例如向一个特定地址写值 // 对于LPC23xx常用方法是 // *(uint32_t *)0xE01FC0C0 0x0; // 向PLL馈送寄存器写0一种常见触发方式请务必参考最新官方例程 // 然后执行WFI __WFI(); // 代码不会执行到这里因为唤醒是复位 } // 系统从深度掉电被RTC唤醒或上电复位后在main()函数开始处 int main(void) { // 0. 基本的系统初始化时钟可能还在IRC SystemInit(); // 1. 检查复位来源判断是否是深度掉电唤醒 if (RSIR 0x10) { // 假设0x10代表RTC唤醒标志具体值查手册 // 2. 从电池备份RAM恢复数据 uint32_t *battery_ram (uint32_t*)0xE0088000; critical_data1 battery_ram[0]; critical_data2 battery_ram[1]; // 3. 清除唤醒标志 RSIR 0x10; // 4. 跳转到之前的应用状态恢复执行 Restore_Application_State(); } else { // 正常上电复位或外部复位执行完整的初始化 Normal_System_Init(); } // ... 主循环 }4. 独立电源域与电池供电实战设计LPC2361/62低功耗能力的另一个硬件基石是它的独立电源域设计。理解这个你才能设计出真正“超长待机”的系统。4.1 三大电源引脚解析VDD(3V3)这是**I/O引脚环Pad Ring**的电源。所有GPIO、通信接口的电平都由此引脚决定。它必须始终存在只要芯片需要与外界进行数字IO通信。VDD(DCDC)(3V3)这是芯片内部数字逻辑核心的电源包括CPU、内存、大部分外设和片上DC-DC转换器。这个DC-DC转换器是一个开关电源能高效地将外部3.3V转换为内核需要的更低电压如1.8V从而降低整体功耗。VBAT这是独立电源域的供电引脚专门且仅为实时时钟RTC和2KB电池备份RAM供电。4.2 两种供电方案与选型方案一单电源供电最常用将VDD(3V3)和VDD(DCDC)(3V3)两个引脚直接连接共同接到你的主3.3V电源上。这是最简单的接法适用于大多数对功耗不是极端敏感的应用。优点电路简单成本低。缺点无法单独关闭I/O电源来省电。当你进入掉电模式时虽然内核功耗大降但整个I/O引脚环仍然带电会产生一定的静态漏电流。方案二双电源供电极致低功耗使用两个独立的3.3V电源一个给VDD(3V3)I/O另一个给VDD(DCDC)(3V3)内核。这带来了巨大的灵活性在深度掉电模式下你可以完全切断VDD(DCDC)(3V3)的供电仅保留VBAT给RTC和VDD(3V3)保持I/O状态可选。此时芯片内核功耗为0。在需要极低待机功耗但又要保持某些I/O状态如保持一个上拉电阻状态以监测事件时可以仅关闭内核电源VDD(DCDC)(3V3)而I/O电源VDD(3V3)保持此时功耗介于方案一的掉电模式和完全断电之间。关键应用由RTC闹钟或外部事件通过I/O状态变化触发一个电源管理芯片来重新接通VDD(DCDC)(3V3)实现“瞬时开机长期零功耗待机”。VBAT引脚的设计必须连接一个备份电源通常是纽扣电池如CR2032或超级电容。在主电源正常时可以通过一个肖特基二极管或理想的电源路径管理芯片由主3.3V为VBAT供电并对备份电池充电。当主电源断开时由备份电池为VBAT供电维持RTC走时和电池RAM数据。此引脚电流极小微安级一颗小容量电池可支撑数年。在原理图布局上VBAT引脚的去耦电容要尽量靠近引脚并且备份电源的走线要避免被其他数字信号干扰。5. 低功耗设计实战从理论到代码的避坑指南知道了原理和模式我们来看如何在实际项目中应用。这里有几个我踩过坑才总结出的关键点。5.1 时钟与功耗模式配置流程清单一个稳健的低功耗应用初始化流程应该像下面这样上电复位后系统默认运行在4MHz IRC下。系统初始化 a. 配置引脚功能特别是唤醒引脚。 b. 初始化必要的外设如用于调试的UART但注意后期可关闭其时钟。 c.配置并启动主振荡器如果需要高频。 d.配置PLL参数N, M, P并等待PLL锁定while((PLLSTAT 0x400) 0);。 e.将系统时钟源切换到PLL输出。 f. 根据需要调整CCLK和各个外设的PCLK分频。应用初始化初始化应用层任务、定时器、中断等。进入低功耗循环 a. 主循环检查是否有任务需要处理。 b. 若无任务根据下一次任务或事件的时间选择最合适的低功耗模式。 - 如果几毫秒后就有定时器中断 - 进入Idle模式。 - 如果几秒甚至几分钟后才有RTC闹钟 - 进入Sleep或Power-down模式。 - 如果等待数小时或数天且无需保持系统状态数据已存Flash或电池RAM- 进入Deep Power-down模式。 c. 在进入前保存现场将CPU核心寄存器如果需要、外设状态保存到RAM或电池RAM。 d. 配置唤醒源使能中断、设置RTC闹钟。 e.关闭所有不需要的外设时钟通过PCONP寄存器。这是很多人忽略的省电大招。 f. 执行进入低功耗模式的指令序列。唤醒后 a. 判断唤醒源。 b.恢复时钟系统如果是从Sleep/Power-down唤醒且之前用了主时钟。 c.恢复现场恢复外设状态。 d. 处理唤醒事件。 e. 返回主循环。5.2 常见问题与排查技巧实录问题1进入睡眠/掉电模式后电流降不下去比手册典型值高很多。检查1浮空输入引脚。未使用的GPIO引脚如果配置为输入且浮空会因电平不确定导致内部MOS管部分导通产生漏电流。务必将不用的引脚设置为输出低电平或使能内部上拉/下拉电阻。检查2外设时钟未关闭。通过PCONP寄存器外设功率控制寄存器逐个检查确保所有未使用的外设模块时钟都被禁用。即使外设不工作只要时钟在跑就有动态功耗。检查3模拟外设未断电。ADC、DAC等模块在不用时除了关闭时钟还要关闭其模拟电源通过相关控制寄存器。检查4电源引脚去耦。电源纹波过大也可能导致功耗测量不准确保每个电源引脚都有足够的去耦电容100nF 10uF组合并且布局合理。问题2从深度掉电模式唤醒后程序行为异常数据丢失。检查1电池RAM数据是否成功写入/读出。电池RAM的地址是固定的如0xE0088000但在写入前需要确保VBAT域已上电。读取时也要在系统初始化早期进行。建议在读写前后增加校验和如CRC32来验证数据完整性。检查2唤醒后的复位初始化流程。深度掉电唤醒是硬复位你的main()函数开头必须有判断复位来源的代码。如果误判为冷启动就会覆盖电池RAM数据或执行错误的初始化。检查3VBAT引脚电源是否稳定。用示波器测量纽扣电池电压在唤醒瞬间是否有跌落。如果电池电量不足可能导致RTC/RAM数据损坏。问题3使用PLL后系统不稳定偶尔死机。检查1PLL参数计算是否超出范围。重点检查Fcco是否在275-550MHz之间。使用NXP提供的配置工具或库函数来生成参数不要手动硬编码。检查2PLL锁定等待时间是否足够。在切换时钟源到PLL前必须循环查询PLLSTAT寄存器的锁定位。并且在锁定后最好再延迟几个周期。检查3电源噪声。PLL特别是高频下对电源质量敏感。确保核心电源VDD(DCDC)(3V3)的走线宽、短去耦电容容值合适且靠近引脚。检查4Flash加速器配置。当CCLK超过一定频率如20MHz需要启用Flash访问加速器通过FLASHCFG寄存器否则CPU取指速度跟不上会导致取指错误。问题4低功耗模式下无法被外部中断唤醒。检查1唤醒引脚功能是否配置正确。不是所有GPIO都支持异步唤醒在深度睡眠时钟停止时仍能检测边沿。需要查阅数据手册的“External interrupt/wake-up pins”表格。通常只有特定引脚如EINT0, EINT1等可以。检查2唤醒引脚的中断边沿配置。在进入低功耗模式前配置好是上升沿、下降沿还是双边沿触发。进入模式后这些配置寄存器可能仍需要保持。检查3中断优先级与嵌套。确保唤醒中断的优先级足够高且全局中断已开启__enable_irq()。在ARM7中进入低功耗前通常用__WFI()指令它要求中断使能。5.3 功耗测量技巧与优化记录测量MCU的功耗本身就是一个技术活。这里分享几点经验分离测量法在PCB设计时可以将MCU的VDD(DCDC)(3V3)供电线路用一个0欧姆电阻作为跳线。通过测量这个电阻两端的电压差利用欧姆定律I V_diff / RR很小如0.1欧来精确计算核心电流。这样能排除外围电路如传感器、电平转换芯片的功耗影响。静态与动态区分静态功耗漏电流和动态功耗时钟驱动。在掉电模式下测到的是静态功耗。在运行模式下功耗与频率和电压的平方成正比P ∝ f * V^2。所以降低电压和频率是省电最有效的手段。LPC2361/62的工作电压范围是3.0V-3.6V在满足性能前提下使用较低的电压如3.0V可以显著省电。示波器电流探头使用带电流探头的示波器可以直观看到在不同工作模式切换时电流的瞬态变化。你会看到进入掉电模式时电流的下降沿以及唤醒时电流的尖峰。这个尖峰的大小和持续时间会影响你对电源电路特别是电池容量的评估。软件优化频繁变动的模式如果系统需要频繁在运行和空闲模式间切换那么切换本身也有功耗开销。要评估任务周期如果间隔很短比如几十微秒进入深度睡眠可能得不偿失Idle模式更合适。外设时钟门控不光是关闭外设模块PCONP在细粒度上有些外设内部也有时钟门控位。例如定时器在计数值达到匹配后可以自动停止时钟。RAM保持数据如果只需要保持少量数据可以考虑进入深度掉电前将数据存到电池RAM然后彻底断电这比让整个芯片处在任何低功耗模式的功耗都要低得多。最后低功耗设计是一个系统工程需要硬件电源设计、器件选型、软件驱动配置、任务调度甚至算法减少不必要的运算和通讯协同优化。LPC2361/62提供的这套时钟和功耗管理工具箱非常强大理解它、用好它你就能让产品的电池寿命从几天延长到几个月甚至几年。