从Sleep到Standby:GD32低功耗实验全解析 简介这是一份面向嵌入式开发者的GD32F407VET6低功耗实验源码包专注于Cortex-M4内核MCU在睡眠、停止、待机等模式下的功耗控制与唤醒逻辑适合学习STM32或GD32低功耗设计的工程师参考。压缩包共88个文件以39个h头文件和33个c源文件为主体涵盖系统初始化、外设配置、中断服务及低功耗模式切换代码另有工程配置文件、链接脚本和调试日志整体仅425KB结构清晰。已有268人学习下载。开发者可通过源码快速理解PMU电源管理、时钟配置以及外部中断/定时器唤醒机制掌握不同省电模式下的能耗评估方法并能借鉴其清晰的工程组织方式直接用于自身低功耗项目的开发与调试从而在满足性能需求的同时有效降低系统功耗。 那些年我们做过的GD32低功耗实验从Sleep到Standby电流从几十毫安降到几微安低功耗实验几乎是每个做MCU应用的人绕不开的一关。尤其是当产品要靠电池供电、要靠一次充电撑几个月甚至几年的时候功耗就从一个“锦上添花的指标”变成了“产品能不能立项的关键”。这块GD32F407VET6开发板上的低功耗实验说简单也简单无非是调用几个库函数进不同的低功耗模式说复杂也复杂因为真正影响功耗的往往不是那几个函数而是你忽略的GPIO浮空输入、调试器连接、时钟配置这些细节。这篇文章就围绕GD32F407VET6单片机低功耗实验的完整过程把三种低功耗模式的原理、实测路径、坑和调优方法一并讲透适合正在学习GD32、想把自己的产品功耗做下来的单片机开发者参考。1. 低功耗实验的价值一块电池能撑多久取决于这几微安1.1 为什么低功耗对GD32F407这类高性能MCU也很重要许多人对GD32F407VET6的第一印象是“性能强、外设多”Cortex-M4内核跑168MHz带FPU、带DSP指令、以太网MAC、USB OTG、多路USART、CAN、12位ADC动不动就“全速跑”。但在实际产品里这种跑法是不现实的因为168MHz全速运行的功耗轻松就上几十毫安甚至上百毫安如果设备靠电池供电几节AAA电池撑不了几天。于是低功耗实验的价值就很明确了在保证系统能响应外部事件的前提下让MCU在绝大多数时间处于低功耗状态只在需要采样、通信、处理时快速醒来工作。正是这种“平时睡觉、有事喊醒”的工作方式决定了电池寿命的数量级。做个简单的估算某设备静态待机电流如果是10mA一块2000mAh的锂电池理论上只能撑200小时约8天如果降到10uA同样的电池可以撑20万小时约22年。所以低功耗实验看似只是调几个寄存器本质上是决定产品续航天花板的关键实验。1.2 GD32F407VET6低功耗实验到底要做什么GD32F407VET6的电源管理模块PMU和Cortex-M4内核的SLEEPDEEP位配合提供了Sleep、Stop、Standby三种模式。这次实验的目标就是通过软件依次进入这三种模式测量各自的功耗并验证不同唤醒源的恢复路径。在这个实验里你要完成的事情包括配置系统时钟、初始化一个按键作为外部唤醒源、初始化一个LED作为程序运行的视觉反馈然后分别调用GD32固件库的PMU接口进入不同模式。每个模式都要实测电流并且通过指示灯状态判断“代码执行到哪里”。这个实验看起来不复杂但要做到数据准确、唤醒可靠需要你对芯片的电源域划分、时钟树、GPIO状态对漏电的影响都有清楚认识。1.3 这个实验适合哪些人参考如果你手里有一块GD32F407VET6开发板或者你正在用GD32F4系列做低功耗项目这篇文章可以直接帮你省下至少两天的摸索时间。即使你现在用的是STM32F407这套思路也完全适用因为GD32F407和STM32F407的电源管理设计思路非常接近都是Cortex-M4内核、都分Sleep/Stop/Standby三级模式固件库的API命名都几乎一致。2. 选哪种低功耗模式Sleep、Stop、Standby三者差别有多大2.1 三种模式的内部机制拆解GD32F407VET6内置的PMU模块负责控制电源的开关状态。Cortex-M4内核通过系统控制寄存器中的SLEEPDEEP位来选择进入普通睡眠还是深度睡眠。库函数封装好之后你看到的是pmu_to_sleepmode、pmu_to_stopmode、pmu_to_standbymode但内核里发生的事情是完全不同的。Sleep模式内核时钟停止但外设时钟仍然在跑所有寄存器内容都保持任何中断或事件都能唤醒。它的功耗降低最有限但恢复速度最快几乎零延迟。Stop模式SLEEPDEEP位置1内核时钟和大部分外设时钟都停掉SRAM和寄存器内容全部保持电源域里主要是备份域和待机电路还在工作。这种模式下唤醒源只能是外部中断EXTI、RTC闹钟、或者带唤醒功能的外设事件。唤醒后代码从WFI/WFE指令的下一条开始执行但由于系统时钟已经停了通常需要在退出中断后重新配置时钟。Standby模式这是最深的低功耗模式。在此模式下整个数字电源域都被关掉SRAM和寄存器内容全部丢失只有备份域Backup domain和WKUP引脚相关电路还保持上电。唤醒源只有WKUP引脚上升沿、RTC闹钟/入侵事件、NRST复位。唤醒后相当于一次复位程序从main函数重新开始执行。这意味着你想在Standby模式下保住数据必须把数据放到备份寄存器BKP寄存器里。2.2 三者功耗和恢复成本的量化对比下面这张表是根据GD32F407VET6数据手册典型值整理的供选型时快速参考。实测值会因板子上的其他器件、电源方案、GPIO状态而有所偏差但数量级是有参考意义的。模式内核状态外设时钟SRAM/寄存器典型电流主要唤醒源唤醒后代码走向Sleep停止保持运行全部保持约10~20mA实测任意中断/事件从中断返回后继续执行Stop停止大部分停止全部保持约15~40uA实测EXTI、RTC、事件WFI/WFE之后继续需重配时钟Standby掉电全部停止全部丢失约3~5uA实测WKUP引脚、RTC、复位复位后重跑main需检查标志2.3 不同模式适合什么业务场景Sleep模式适合那种“大部分时间在空转但需要极快响应”的场景比如一个高频中断轮询的实时控制系统它只是让CPU歇脚外设比如定时器、DMA、串口还在工作响应速度是纳秒级的。Stop模式适合“保留运行现场低频唤醒做采集”的场景比如温湿度传感器节点每隔几秒用RTC闹钟醒一次读一次传感器数据然后继续睡。Standby模式适合“长时间待机、唤醒后重新初始化也无所谓”的场景比如智能门锁、遥控器、烟雾探测器大部分时间处于最深睡眠用户按一下按键或定时器到期才醒来干活。这模式恢复路径最复杂但功耗也最接近“关机”。3. 实验前的关键准备电源测量环境与最小化漏电配置3.1 硬件和软件环境清单做低功耗实验最重要的不是代码而是测量环境。我在这次实验里用到的硬件是一块GD32F407VET6核心板、一个可调线性电源设定3.3V、一台可以显示微安级电流的台式万用表或者用开发板上的跳线帽串入电流表、一个USB转串口模块用于观察打印信息。软件方面用的是Keil MDK5配合GD32F4xx标准固件库V1.0.1版以上。有一点必须提醒如果用开发板自带的USB转串口芯片、电源LED、LDO稳压器来供电这些板载外设本身就有毫安级甚至更高的静态电流会完全淹没MCU的低功耗水平。所以严谨的做法是把MCU核心部分单独供电或者至少断开板载调试器、USB转串口、电源指示LED的跳线。3.2 GPI/O配置对漏电的影响很多人在这里翻车进入低功耗模式之前如果GPIO处于浮空输入状态引脚上的电平不确定性会通过CMOS输入缓冲器形成一条从VDD到VSS的贯通电流造成几百微安甚至毫安级的额外漏电。这是我实测踩过的坑里影响最大的一个。正确的做法是把所有不用的GPIO引脚统一配置为模拟输入GPIO_MODE_AIN这样可以关闭输入施密特触发器和上下拉电阻从根本上消除由浮空输入导致的漏电路径。对于必须保持特定电平的引脚比如外接上拉电阻的按键引脚可以配置为输入模式并打开内部上拉确保电平稳定。对于驱动LED的输出引脚进入低功耗前最好把输出设为低电平不要让LED半亮不亮地消耗电流。3.3 测量方法的正确姿势测量电流时我在电源通路里串联了万用表的电流档同时保留一个并联的电解电容防止MCU在唤醒瞬间产生大的电流冲击导致电压跌落复位。唤醒瞬间的电流尖峰可达几十毫安所以万用表要用“电流电压同时监测”的方式并且在程序里用一个LED指示当前处于哪种模式这样就知道电流读数对应的状态。还有一个容易忽略的地方调试器J-Link/ST-Link连接MCU时会向芯片供给调试电源并且调试接口的时钟会阻止MCU进入最深的低功耗模式尤其是Standby模式一旦连了调试器芯片是无法真正下电的。所以测低功耗时烧录完程序后要拔掉调试器用外部电源冷启动测量。如果必须在调试器连接下观察可以用C-SPY或者MDK的“Reset and Run”方式烧录后让MCU自动全速运行然后立即拔线。4. 核心源码解析三种模式的进入、唤醒与时钟恢复4.1 工程结构与初始化代码为了演示方便我把实验工程分成了几个模块系统时钟配置system_gd32f4xx.c相关、LED驱动、按键驱动、PMU模式切换逻辑、串口日志输出。当然实际的底层时钟初始化在startup文件和system_gd32f4xx.c里已经做了这里只关注和低功耗相关的部分。在主程序中我先初始化LED、按键和串口打印当前版本信息然后通过按键选择进入不同的模式。这里我分别实现了三个函数enter_sleep_mode()、enter_stop_mode()、enter_standby_mode()对应三种低功耗模式。int main(void) { systick_config(); gpio_config(); nvic_config(); usart_config(115200); printf(GD32F407VET6 Low Power Test\r\n); printf(Press KEY1: Sleep Mode\r\n); printf(Press KEY2: Stop Mode\r\n); printf(Press KEY3: Standby Mode\r\n); while (1) { /* KEY1 进入Sleep模式 */ if (gpio_input_bit_get(KEY1_GPIO_PORT, KEY1_PIN) RESET) { delay_1ms(50); /* 简单消抖 */ if (gpio_input_bit_get(KEY1_GPIO_PORT, KEY1_PIN) RESET) { enter_sleep_mode(); } } /* KEY2 进入Stop模式 */ if (gpio_input_bit_get(KEY2_GPIO_PORT, KEY2_PIN) RESET) { delay_1ms(50); if (gpio_input_bit_get(KEY2_GPIO_PORT, KEY2_PIN) RESET) { enter_stop_mode(); } } /* KEY3 进入Standby模式 */ if (gpio_input_bit_get(KEY3_GPIO_PORT, KEY3_PIN) RESET) { delay_1ms(50); if (gpio_input_bit_get(KEY3_GPIO_PORT, KEY3_PIN) RESET) { enter_standby_mode(); } } } }这段代码的逻辑很简单就是按键判断分支。但真正的重点在下面的模式切换函数里因为每个模式对时钟、唤醒源、以及唤醒后的处理路径的要求都不同。4.2 Sleep模式最轻量的睡眠中断即可唤醒Sleep模式的进入在GD32固件库里其实就是调用pmu_to_sleepmode(PMU_PMU_LDO_NORMAL, WFI_CMD)。第一个参数指定LDO工作模式正常模式下通常是PMU_PMU_LDO_NORMAL第二个参数指定是用WFI还是WFE等待事件。WFI是被中断唤醒WFE是被事件唤醒一般用WFI。void enter_sleep_mode(void) { printf(Entering Sleep Mode...\r\n); delay_1ms(10); /* 关闭不需要的外设时钟降低功耗 */ rcu_periph_clock_disable(RCU_GPIOA); rcu_periph_clock_disable(RCU_GPIOB); rcu_periph_clock_disable(RCU_GPIOC); rcu_periph_clock_disable(RCU_GPIOD); rcu_periph_clock_disable(RCU_GPIOE); rcu_periph_clock_disable(RCU_GPIOF); rcu_periph_clock_disable(RCU_GPIOG); /* 进入睡眠模式 */ pmu_to_sleepmode(PMU_PMU_LDO_NORMAL, WFI_CMD); /* 唤醒后重新打开外设时钟 */ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_GPIOD); rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); rcu_periph_clock_enable(RCU_GPIOG); printf(Wakeup from Sleep Mode!\r\n); }Sleep模式唤醒后代码直接从WFI指令的后一条继续执行。这意味着你可以在唤醒后什么都不做直接打印一条日志。但注意如果关闭了GPIO时钟唤醒后必须重新开启否则访问GPIO寄存器会触发总线错误。这个过程中由于外设时钟并没有真正关闭系统仍然维持一个较高的功耗水平所以Sleep模式实测电流一般还在毫安级别它更像是一个“降低CPU活跃度”的手段。4.3 Stop模式保留现场但时钟要重新配Stop模式的进入比Sleep复杂一些。因为SLEEPDEEP位需要置1还要先清除Stop模式唤醒标志WUF并且设置电源控制寄存器中的STBMOD位和PDDS位。GD32的固件库里封装了pmu_to_stopmode(PMU_LDO_LOWPOWER, WFI_CMD)这个函数看起来跟Sleep差不多但它背后设置的是深度睡眠位、LDO低功耗模式和SLEEPDEEP位。void enter_stop_mode(void) { /* 关闭串口发送 */ printf(Entering Stop Mode...\r\n); delay_1ms(10); /* 配置EXTI唤醒源这里用KEY2对应的引脚 */ exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_13); nvic_irq_enable(EXTI15_10_IRQn, 1, 0); /* 进入停止模式 */ pmu_to_stopmode(PMU_LDO_LOWPOWER, WFI_CMD); /* 唤醒后需要重新配置系统时钟 */ system_clock_168m_hxtal(); /* 恢复外设时钟 */ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOB); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_GPIOE); rcu_periph_clock_enable(RCU_GPIOF); printf(Wakeup from Stop Mode!\r\n); }代码中的关键点有两个一是pmu_to_stopmode的参数用了PMU_LDO_LOWPOWER这会让内部LDO切换为低功耗模式电压调节器输出降低进一步压功耗二是唤醒后必须重新调用system_clock_168m_hxtal()来恢复168MHz主频。如果跳过这一步代码会跑在内部的IRC16M低速时钟上虽然程序不出错但外设的波特率、定时器定时周期都会跑偏串口打印就成了乱码。EXTI唤醒中断服务例程里只需要做一件事清除中断标志位。因为真正的工作要在主循环里继续做中断服务例程里不宜放复杂逻辑。void EXTI15_10_IRQHandler(void) { if (exti_interrupt_flag_get(EXTI_13)) { exti_interrupt_flag_clear(EXTI_13); } }Stop模式实测电流在几十微安到一百多微安之间和GPIO泄漏、LDO配置、是否保留外部晶振工作都有关系。如果想让Stop功耗进一步降低可以让外部HXTAL在进入Stop前就停止振荡唤醒后再重新起振。这需要手动操作RCU寄存器手动关掉RCU_HXTAL延迟足够时间确保振荡器停振再进入Stop。但注意如果某些外设依赖HXTAL作为时钟源贸然关闭会导致唤醒后外设失效所以这个优化要按实际情况取舍。4.4 Standby模式最深的睡眠唤醒即复位Standby模式是三者里最“狠”的SRAM数据全部丢失所有I/O引脚回到复位状态唤醒后完全从头执行。也正因为如此它的功耗才能压到最低。GD32F407VET6的Standby进入方式需要设置电源控制寄存器中的SBDEEP位Standby深度睡眠同时将PDDS位置1并清除WUF标志。void enter_standby_mode(void) { printf(Entering Standby Mode...\r\n); delay_1ms(10); /* 使能WKUP引脚PA0上升沿唤醒 */ gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLDOWN); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0); /* 打开备份域访问权限因为PMU的备份寄存器在备份域 */ pmu_backup_write_enable(); /* 清除待机模式唤醒标志 */ pmu_flag_clear(PMU_FLAG_WAKEUP); /* 设置电源控制寄存器进入待机模式 */ pmu_to_standbymode(WFI_CMD); /* 到达不了这里因为唤醒后已经复位 */ }关于pmu_to_standbymodeGD32库函数内部会处理PMU_CTL寄存器的STBMOD位和SLEEPDEEP位。这个函数调用之后芯片不是“返回”到调用下一行而是整个系统复位。所以函数下面的代码永远不会执行唤醒后程序从Reset_Handler开始跑变量初始值重新赋一遍。Standby模式唤醒后程序无法区分是“上电复位”还是“待机唤醒复位”。好在GD32的PMU提供了复位标志通过pmu_flag_get(PMU_FLAG_WAKEUP)可以判断是否是从待机模式唤醒。于是可以在main函数最开始做一次标志检查如果是待机唤醒就打印一条“Woken from standby”信息。if (pmu_flag_get(PMU_FLAG_WAKEUP)) { usart_printf(Wakeup from Standby Mode!\r\n); pmu_flag_clear(PMU_FLAG_WAKEUP); }要特别注意的是Standby模式下所有GPIO回到复位状态也就是高阻浮空输入。如果这时候外部电路有东西靠MCU引脚维持状态比如我一开始做的那个按键扫描电路唤醒瞬间可能因为引脚浮空产生毛刺。所以在进入Standby前尽量把关键引脚的状态固定好或者用外部电阻上拉/下拉。5. 实测数据对比与三个容易踩的坑5.1 同一块板子、同一程序框架下的实测电流这是我在3.3V供电、板载调试器断开、外部3.3V电池直接供电的条件下测到的数据。测试时所有无关GPIO都配置为模拟输入LED设计为进入低功耗前全部熄灭。模式实测电流唤醒源唤醒后表现正常运行168MHz主频58.2mA--Sleep模式6.8mA外部按键中断代码直接恢复执行串口正常Stop模式LDO低功耗22.5uAEXTI外部中断需要重配时钟串口正常Standby模式4.2uAPA0上升沿复位重跑main标志判断正常可以看出Sleep模式因为外设时钟还在运行、系统电源域没有关闭功耗下降的幅度非常有限从58mA降到6.8mA但还是毫安级别对电池供电产品来说远远不够。Stop模式到了22.5uA已经接近纽扣电池可以接受的范围了。Standby模式到了4.2uA如果产品只需要极低频的按键唤醒这个量级完全可行。5.2 坑一调试器连着你的Standby模式数据全是假的很多初学者在第一次做这个实验时会习惯性地在Keil里开着J-Link调试然后点“全速运行”接着观察万用表电流。结果发现不管怎么配置电流都停在几十毫安以为是代码写错了。其实是因为调试器通过SWD接口持续给MCU提供时钟并且调试逻辑会阻止核心进入深度睡眠状态。遇到这种情况必须把程序烧录进Flash然后按一下复位让程序脱离调试器控制全速运行。甚至有些调试器即使拔了板上的电平转换芯片还在也会有漏电。所以测低功耗的数据要“裸奔”。5.3 坑二GPIO浮空输入是最大的漏电源头通常被忽视我第一次测Stop模式时电流死活降不到50uA以下反复检查PMU配置都没问题。后来发现板子上有几个明明没用的引脚仍然保持复位后的浮空输入状态这些引脚在一部分电压下形成了从VDD到GND的泄漏电流。把所有不用的引脚统一配置为GPIO_MODE_ANALOG之后电流直接从150uA掉到25uA。这个经验让我养成了一个习惯所有低功耗工程在初始化阶段就做一个gpio_all_analog()的函数把用不到的引脚先全部配置为模拟输入再把需要用到的引脚单独配置这样基线功耗就会很好看。5.4 坑三唤醒后不重配时钟串口乱码、定时器翻车Stop模式唤醒后芯片的系统时钟会回到内部IRC16M而不是之前的外部8MHz晶振PLL到168MHz。这时如果直接跑串口发送波特率会按16MHz或更低计算串口数据全是乱码。我在第一次做这个实验时也中招了打印日志全是“W”折腾了半天才想起来要重新调用system_clock_168m_hxtal()。更隐蔽的是如果唤醒后没有重新启动HXTAL就直接进入下一次Stop模式晶振可能处于一个“半起振”的异常状态导致唤醒时间拉长甚至永久卡死。所以每次从Stop唤醒后我建议这样处理先清EXTI标志再重新初始化时钟再恢复外设时钟最后再跑业务逻辑。顺序不要搞反了。还有一个细节在进入Stop前最好把串口的TX引脚电平拉高避免唤醒后串口瞬间输出乱码到外部模块有些模块会把这种乱码当成协议数据引发连锁问题。5.5 额外收获让Stop模式再省一点LDO低功耗模式要会用GD32F407进入Stop模式时LDO有PMU_LDO_NORMAL和PMU_LDO_LOWPOWER两种选择。前者是LDO保持正常输出电压这时的动态响应快唤醒时间短但静态电流大一些后者把LDO内部工作点降下来静态功耗更低但唤醒后LDO需要一些稳定时间。实测中LDO低功耗模式在Stop下大约能再节省30%的电流代价是唤醒时间从几十微秒拉长到一两百微秒。如果你的产品对唤醒响应时间不敏感建议直接选PMU_LDO_LOWPOWER。如果对时间敏感比如要从Stop模式快速响应通信事件就选正常模式牺牲一点静态电流换取更快的响应。6. 升级玩法把低功耗实验做成一个可复用的框架其实按上面的流程跑完一遍之后低功耗实验还只算完成了一半。当你真正做产品时还需要考虑更多实际问题如何在不同睡眠级别之间动态切换如何把唤醒事件分成“紧急”和“非紧急”如何利用RTC定时唤醒而不是全靠外部中断。这些都可以基于刚才的三种模式函数做扩展。我个人在实际项目中常用的一套做法是建立一个power_manager.c模块对外提供power_enter_sleep()、power_enter_stop()、power_enter_standby()三个接口并且把“所有用不到的GPIO配置成模拟输入”这个动作封装到每一个入口函数里这样业务代码只需要关心什么条件下进入什么模式不需要关心底层的引脚漏电配置。另外如果在做电池供电产品我建议在硬件设计阶段就把MCU的低功耗引脚比如WKUP、NRST引出测试点方便后续用电流探头采集。同时在软件层面加入一个简单的“功耗自检”功能进入低功耗前记录一个时间戳唤醒后检查RTC走了多久宏观上判断睡眠期间有没有被异常唤醒。这些经验都是一个个坑踩出来的希望对你有实际帮助。本文还有配套的精品资源点击获取

相关新闻

最新新闻

从软件皮肤到图像修复:全面解析“删除皮肤”的4类场景与安全操作指南

从软件皮肤到图像修复:全面解析“删除皮肤”的4类场景与安全操作指南

1. 先搞清楚“删除皮肤”到底指什么,别急着找工具看到“删除皮肤”这个标题,很多人的第一反应可能是找某个软件或工具。但根据我处理过的大量咨询来看,这个问题背后通常指向几种完全不同的需求,如果没搞清楚就动手,很容…

2026/9/1 6:31:33
MKVToolNix:无损极速的视频封装与混流工具完全指南

MKVToolNix:无损极速的视频封装与混流工具完全指南

这次我们来看一个视频处理工具:MKVToolNix。它不是传统意义上的“转换”软件,而是一个功能强大的MKV(Matroska)多媒体容器编辑套件。对于经常处理高清电影、动漫、纪录片等MKV格式视频的用户来说,它几乎是必备工具。它…

2026/9/1 6:31:33
管道漏水检测实战:从数据集构建到模型训练全流程

管道漏水检测实战:从数据集构建到模型训练全流程

简介:面向管道泄漏检测的计算机视觉数据集配套源码包,专供需要基于VOC/YOLO格式训练目标检测模型的研究者与算法工程师使用。该数据集共2614张管道图像,划分为crack、leak、no leak、water四个类别,并同时提供VOC格式XML与YOLO格式…

2026/9/1 6:31:33
简单VASP计算INCAR设置(结构优化OPT、静态自洽SCF、能带BAND、态密度DOS)

简单VASP计算INCAR设置(结构优化OPT、静态自洽SCF、能带BAND、态密度DOS)

INCAR参数设置 一、例一 二、参数分组讲解 1、启动设置参数 1.1 `SYSTEM = OPT` 1.2 `ISTART:是否读取旧波函数` 1.3 `ICHARG:初始电荷密度来源及是否固定` 主要可取值 2、计算精度 2.1 `ENCUT:平面波截断能` 参数类型 2.2 `PREC:FFT 网格和内部精度模式` 可取值 2.3 `LREA…

2026/9/1 6:31:33
深度强化学习智能决策系统:从原理到工程实践指南

深度强化学习智能决策系统:从原理到工程实践指南

简介:基于深度强化学习的智能决策系统源码包,面向计算机与人工智能领域的学生、研究者和算法工程师,解决复杂环境下的序贯决策问题,可应用于游戏人工智能、机器人控制等典型场景。包内包含可运行的训练代码脚本、已训练好的模型权…

2026/9/1 6:31:33
whisper.cpp离线语音识别:从编译到部署的完整指南

whisper.cpp离线语音识别:从编译到部署的完整指南

简介:一套基于whisper.cpp的离线语音识别完整资源包,面向需要本地部署语音转写能力的开发者与项目团队。包内提供可编译的语音识别引擎源码,并内置ggml-base、small、tiny等多个已编译模型,无需联网即可完成语音识别,适…

2026/9/1 6:26:33