RISC-V E300时钟系统详解:PLL配置与低功耗设计
调过的板子里十个有八个“看起来是软件问题”的怪毛病最后都能在时钟树上找到根源。UART出来全是乱码SPI时序对不上PWM频率差一大截——第一反应怀疑代码第二反应怀疑信号完整性折腾一圈回头才发现时钟源或者分频系数压根就不是你以为的那个值。RISC-V E300 SOC也不例外它的时钟产生模块是整个系统的“心跳发生器”这一讲就把这块一次说透。E300平台的时钟设计思路其实很清晰用外部低频晶振做底、片上PLL做高频倍频、再靠一套寄存器把频率分配到核心、总线、外设等不同时钟域。它解决的问题非常具体——既要让CPU跑到几百兆赫兹又要让UART、I2C这类外设工作在几十兆赫兹以内还得照顾低功耗模式下“系统睡着了但RTC还在走”的需求。对刚接触RISC-V的开发者来说这块内容属于“不看则已一看必踩坑”的典型区域对做定制SoC选型或芯片验证的人来说理解时钟产生的设计取舍比背寄存器更值钱。1. 先看整体E300的时钟从哪里来到哪里去1.1 三个时钟源一台戏E300平台的物理时钟源一般有三个它们各有各的脾气。第一个是高频晶振典型频率在16MHz到32MHz之间负责给PLL和系统高频运行提供基准。它是整个系统跑高速的“燃料”一旦外部晶振没起振或者频率偏差大后面所有时钟都会跟着错。第二个是低频晶振典型频率32.768kHz。这玩意儿在普通跑马灯程序里存在感很低但一进入睡眠模式就变成主角——实时时钟、部分唤醒逻辑、低功耗看门狗全靠它撑着。第三个是片上高频RC振荡器频率通常比高频晶振低一点或者接近优点是上电即起振、不需要外部器件缺点是温漂和制造偏差比较大精度远不如晶振。它一般用于芯片出厂默认启动、或者晶振没准备好之前的过渡阶段。理解这三个源的关键在于系统上电顺序一定是“先靠片上RC振起来跑基础初始化再切到晶振之后才轮到PLL干活”。很多新手上来就写PLL配置却忘了检查晶振是否稳定这就是后面所有诡异现象的起点。1.2 PLL倍频器为什么必不可少CPU核心想要跑到两三百兆赫兹但外部晶振只有16MHz直接倍频16倍显然不现实PLL就是用来干这个的。PLL的工作原理可以理解为“压控振荡器反馈回路”的自动校正系统它内部有一个能输出高频信号的振荡器通过分频器把输出频率降下来和输入参考频率做比较如果两者不一致就自动调整振荡器控制电压直到输出频率完全锁定在目标值。整套机制保证的是频率准确且稳定而不是随便一个倍频系数都能成立。在E300平台上PLL通常采用“输入分频-倍频-输出分频”的三级结构输入分频先把外部晶振频率降下去便于后续倍频控制倍频环节决定VCO的振荡频率输出分频再把VCO高频率降到实际需要的系统频率。这套结构的好处是把“高频产生”和“低频使用”解耦了。VCO可以工作在它最合适的几百兆赫兹区间而最终输出到核心、总线、外设的频率可以各自按需分频。这就像城市电网发电厂统一发高压电再通过不同的变电站降压到工业、商业、居民区而不是每个小区自己配一台发电机。1.3 时钟树分域核心、总线、外设各走各路E300平台在PLL输出之后并不会把同一份时钟直接塞给所有模块而是做成了几个独立的时钟域。第一层是核心时钟域直接决定CPU主频。这是整个系统跑得最快的时钟也是大家最关注的性能指标。第二层是总线时钟域负责指令总线、数据总线以及互联逻辑。它一般比核心时钟低一个档次这样能平衡高速核心和慢速外设之间的时序矛盾。第三层是外设时钟域给UART、SPI、PWM、GPIO等外设使用。这层通常再往下细分成若干独立分频器因为不同外设对时钟频率的要求差异很大——UART需要的是波特率的整数倍关系SPI需要的是SCK的精确时序这些都得单独算。分层设计最大的好处是隔离故障。核心跑再高外设分频配置错了最多是某个外设工作异常不至于把整个系统拖垮。同时也方便做门控某个外设不用了直接把它的时钟关掉整块数字逻辑就不再翻转动态功耗瞬间降下来。2. 撬开PRCI寄存器组掌控时钟的那只手2.1 PRCI寄存器总览E300平台把时钟和复位的控制逻辑统一放在一组叫PRCI的寄存器里一般挂在系统的固定地址段上。它的掌管范围包括时钟源选择、PLL参数、系统分频、部分时钟门控和复位控制。可以把它理解成一块“配电盘”前面是电源和振荡器后面是各个时钟需求方PRCI就是中间那块负责按开关、调电压的调度板。软件对时钟树做任何操作本质上都是读写这组寄存器。PRCI寄存器通常包含几个核心成员PLL配置寄存器、PLL分频寄存器、系统时钟分频寄存器以及时钟源选择/旁路控制位。具体字段布局不同型号会有差异但设计思路高度一致——先找对寄存器基地址再按位域操作最后在切换时钟源时严格遵守先旁路后配置再使能的顺序。2.2 PLL配置字段分频、倍频、旁路PLL相关的寄存器核心字段有三个输入分频系数、倍频系数、输出分频系数。三者之间满足一个关系式VCO频率 输入频率 / (输入分频 1) × (倍频 1)PLL输出频率 VCO频率 / ((输出分频 1) × 2)注意这里有个常常被人忽略的“内部二分频”。很多PLL为了输出对称占空比的时钟在VCO输出端会强制再二分频导致计算出来的结果和预期差了一倍。手册上如果写“PLL输出需要额外除以2”千万别当成笔误。旁路位是整个PLL配置里最重要的一个开关。置上旁路位系统时钟直接绕开PLL走输入时钟源清除旁路位系统时钟才真正切换到PLL的输出。为什么必须设计这个旁路因为PLL从配置到锁定需要几百微秒期间输出频率是不确定的。如果直接改倍频系数CPU可能因为时钟突变直接跑飞或者卡死。旁路模式就是给配置过程一个“安全垫”先在安全时钟下写好参数等PLL锁定了再切过去。2.3 CLKDIV与时钟门控PLL输出的是高频基准具体给谁多少频率还得靠CLKDIV这类系统分频寄存器来分配。分频寄存器一般包含核心时钟分频、总线时钟分频、外设时钟分频几个字段。每个字段控制对应的时钟域在PLL输出基础上再降多少倍。例如PLL输出320MHz核心分频1倍、总线分频2倍、外设分频4倍就能得到核心320MHz、总线160MHz、外设80MHz的一组典型配置。分频系数同样遵循“写值加1才是实际分频比”的惯例即写入0表示1分频写入1表示2分频。写错一位所有频率翻倍或腰斩系统要么快得冒烟要么慢得像蜗牛。时钟门控则更直接许多外设时钟可以独立使能或关闭。门控的本质是“不给时钟就没有翻转没有翻转就没有动态功耗”。对电池供电的低功耗设备来说一个RTC模块持续跑着只耗几微安比一颗蓝牙射频动不动几十毫安省太多这背后全靠精细的门控控制。3. 从晶振到系统时钟一次标准的PLL配置实操3.1 先算参数再动寄存器配置PLL之前先拿出纸笔把参数算明白不要对着寄存器试凑。假设系统外接16MHz高频晶振目标核心时钟是200MHz时钟树设计是PLL输出直接给核心、不额外分频。那问题就变成了如何让PLL从16MHz得到200MHz。套前面的关系式VCO频率 16 / (输入分频1) × (倍频1)PLL输出 VCO / ((输出分频1) × 2)。如果设输入分频为0输出分频为0那么VCO是16 × (倍频1)PLL输出是VCO/2要让输出等于200MHzVCO就得400MHz算下来倍频1等于25倍频取24。整组参数就是输入分频0、倍频24、输出分频0。这个例子里VCO工作在400MHz属于典型PLL的合理区间。如果目标核心时钟改成320MHzVCO就需要640MHz超出很多片上PLL的安全范围那就不能硬来而应该把VCO控制在安全区间内再通过后面的分频降下来。频率不是越高越好VCO超规格轻则锁定不住重则损伤芯片。3.2 配置流程与代码骨架参数算好之后实际操作按固定套路来顺序错一步都可能出问题。第一步进入旁路模式。在改PLL分频寄存器之前先把旁路位置上让系统切到安全时钟源。第二步写入分频系数。把算好的输入分频、倍频、输出分频写进对应位域。第三步等待PLL锁定。锁定标志位一般会上拉没有标志位的就固定延时几百微秒。这一步很多人图省事直接跳过后面等着的就是程序无规律跑飞。第四步清除旁路位。锁定后才允许把系统时钟切回PLL输出。第五步配置系统分频器。按各时钟域目标频率设置核心、总线、外设分频最后使能必要的外设时钟。用代码骨架表达大约是#define PRCI_BASE 0x10008000UL #define PRCI_PLLCFG (PRCI_BASE 0x08) #define PRCI_PLLDIV (PRCI_BASE 0x0C) #define PRCI_CLKDIV (PRCI_BASE 0x10) #define PLL_BYPASS_EN (1UL 16) #define PLL_LOCK_MASK (1UL 31) static void pll_config(uint32_t divr, uint32_t divf, uint32_t divq) { volatile uint32_t *cfg (volatile uint32_t *)PRCI_PLLCFG; volatile uint32_t *div (volatile uint32_t *)PRCI_PLLDIV; // 1. 先旁路再改动参数 *cfg | PLL_BYPASS_EN; // 2. 写入分频倍频系数 *div (divr 0x3F) | ((divf 0x1FF) 6) | ((divq 0x7) 16); // 3. 等待PLL锁定超时保护必须有 uint32_t timeout 100000; while (!((*cfg) PLL_LOCK_MASK) --timeout) ; // 4. 切出旁路 *cfg ~PLL_BYPASS_EN; }实际代码里字段移位和掩码以芯片手册为准但流程框架通用。特别提醒超时保护一定要写PLL如果因为参数不合理锁不住没有超时就是死循环整个系统连异常处理都跑不了。3.3 实测验证串口打印和频率测量配置完成后验证频率是不是真的对不要只靠感觉。最简单的手段是让GPIO翻转用示波器看频率。我常用的办法是配一个GPIO输出引脚在系统时钟配置完成后把某个引脚电平反复翻转或者直接复用PWM模块输出已知分频后的时钟。在示波器上读出实际频率和设计值对比偏差在百分之一以内就算正常。如果偏差到了百分之几十那基本可以断定PLL参数没写对。串口也可以做粗验证。初始化UART时通常会向日志模块传入系统时钟频率配置波特率时如果频率传错了串口出来就是一串乱码。当你发现“代码逻辑看起来没问题但串口就是乱码”的时候先检查传给UART初始化函数的sysclk参数是不是实际值。4. 外设时钟的分配UART、SPI、PWM与RTC4.1 高频外设时钟与分频UART的波特率发生器用外设时钟做基准典型公式是波特率 外设时钟 / (16 × 分频寄存器值)。如果外设时钟是80MHz想要115200波特率分频寄存器值大约是43实际波特率和目标值之间的误差要控制在百分之二以内否则通信双方累积误差过大就会丢字节。SPI的SCK频率同样从外设时钟分频得到。给屏幕刷图时SCK可能想跑到20MHz给SD卡写数据时又想降到几兆这些都需要外设分频器支持不同的分频比。配置SCK之前先算好分频常数别指望靠“试”碰运气。PWM的频率取决于时基时钟和计数周期。同样是80MHz外设时钟PWM频率想要20kHz计数周期就得用4000。写PWM代码的时候如果发现占空比对了但频率不对先把时基时钟算一遍多半是外设分频配错了。外设时钟域配置有个共同原则分频后的频率不要超过外设的最大规格。SPI模块标称最大SCK是25MHz结果你把外设时钟配到80MHz又选了1分频强行让SPI跑飞短期可能没反应长期就是偶发数据错误。频率规格这回事宁可信手册不要信评价。4.2 实时时钟域LFXOSC的独立世界实时时钟在E300平台上通常单独挂在低频晶振上和PLL那条高速时钟链完全隔离。原因很朴素RTC要长期工作睡眠甚至关机状态下都得继续计时如果依赖高频PLL整个系统就必须一直开着功耗根本压不下来。LFXOSC通常是32.768kHz这是石英晶振界的标准频率2的15次方方便分频得到1秒实时时钟。RTC计数器的精度完全取决于这颗低频晶振的准确度所以低功耗场景下晶振选型要重点关注频率稳定度。软件上需要注意一点低频晶振起振时间比高频晶振长不少有时能达到一两秒。系统刚上电就去读RTC很可能读到还没开始走的值。常规做法是启动后等待振荡器稳定标志或者至少延时几百毫秒再去信任RTC。4.3 看门狗与低功耗时钟的配合看门狗定时器在嵌入式系统里是兜底防线它的时钟源选择直接影响超时时间计算。E300平台看门狗可能挂在低频时钟域也可能挂在系统时钟下要看具体型号设计。挂在低频时钟下的看门狗好处是系统睡死了它还能独立超时复位适合长时间无人值守的设备。挂在系统时钟下的看门狗喂狗时间随主频变化系统降频运行超时时间就变长注意别因为省电降频导致看门狗形同虚设。我在实际工程里遇到过一种情况低功耗模式下为了省电把系统时钟切到低频源结果看门狗超时时间从1秒变成几十秒设备卡在异常状态半天没复位。后来把看门狗时钟源固定到独立低频振荡器上才算彻底解决。5. 低功耗场景下的时钟行为5.1 睡眠模式里谁还醒着E300平台支持多种睡眠模式不同模式下的时钟树行为差异很大。轻度睡眠一般只停CPU核心时钟总线、外设时钟继续跑醒来可以秒级恢复适合短暂空闲场景。中度睡眠会把PLL关掉只保留高频晶振或者片上RC省下PLL本身那部分功耗。深度睡眠则是“能关的全关”PLL关闭、高频时钟源关闭、高速外设时钟关闭只留低频晶振驱动RTC和少量唤醒逻辑。这里最容易踩的坑是唤醒后时钟状态。系统从深度睡眠醒来CPU时钟源可能自动切回片上RC或者低频源如果固件没有在唤醒流程里重新配置PLL并切回高速时钟系统就会一直“龟速”运行。表现就是程序能跑、功能正常但性能掉了一个数量级。5.2 时钟门控的开关节奏门控时钟省电的原理前面提过实际操作中节奏更重要。初始化外设时先打开时钟再初始化寄存器顺序反了外设可能处于假死状态。关闭外设时先禁用外设再关时钟避免正在传输数据时突然断时钟导致总线卡死。还有一类“不知不觉挂掉”的门控问题是调试接口。有些调试模块和片上追踪单元的时钟默认是关闭的调试器连不上目标板并不是芯片坏了而是没有使能调试时钟。遇到调试器连接失败先查时钟门控寄存器。5.3 低功耗配置的实测经验我做低功耗调试的时候习惯把功耗拆开看高频时钟源、PLL、核心域、外设域各自贡献多少。先用寄存器逐层关掉时钟域观察功耗表每一步的变化就能快速定位到功耗大户。有一个经验比较实用深度睡眠唤醒后把唤醒原因记录到寄存器里再决定初始化哪些时钟域。如果是RTC定时唤醒做周期上报就只启必要外设如果是外部按键中断唤醒那音频、显示屏的时钟全部不初始化等用户实际操作再开。按需初始化时钟比统一初始化能省下一大块功耗。6. 常见问题与排查思路速查6.1 串口乱码与波特率漂移板上串口全是乱码前三个怀疑对象第一系统时钟频率传给串口库的值不对第二PLL实际输出频率和设计值不一致第三低频时钟或晶振偏差太大。排查方法是先固定变量。串口调试助手那端波特率不变固件里把传给UART初始化的sysclk改成实际估算值再重新打印。如果乱码变成可读说明时钟配置没问题是软件参数错了。如果依然乱码就得用示波器看UART TX引脚在发0x55时的实际波特率和预期值对比立刻能判断出频率偏差方向。6.2 PLL锁定失败与启动卡死启动卡死在时钟初始化里多半是PLL没锁定还去切旁路或者锁定标志判断逻辑出了问题。先确认倍频后的VCO频率在芯片允许范围内。VCO太高锁不住太低同样锁不住。参数算完先按关系式复算一遍VCO频率超范围就调整输入分频或输出分频。接着确认等待锁定的代码在超时后有没有处理分支。正常流程是超时后回退到旁路模式不切回PLL打印错误信息让系统继续用低频源运行。这样即便PLL配置有误系统也能活下来便于调试而不是彻底死机。6.3 晶振起振问题的几个坑外部晶振不起振常见原因有三个焊接问题、负载电容不匹配、驱动能力不足。焊接问题大头是引脚连锡或者虚焊用万用表量晶振引脚到芯片引脚的连续性就能发现。负载电容不匹配会导致晶振频率偏差大甚至停振换电容或调整振荡器内部驱动强度能解决。驱动能力不足通常表现为晶振波形畸形测出来频率是对的但幅度不够系统里偶发跑飞这种问题在低电压供电时尤其明显。排查手段上示波器探头会引入电容负载直接测晶振引脚容易测死振荡器。如果必须测要用高阻抗低电容探头或者在晶振输出后加个缓冲再测。6.4 排查工具与手段时钟相关的问题我最常用的工具是示波器、功耗分析仪和一段“会说话的测频代码”。测频代码的思路周期翻转一个GPIO引脚假设代码里延时是1000个系统时钟示波器测出翻转周期反推系统时钟频率。这个土办法在没有任何调试器的时候极其好用一步步验证时钟树每个环节。另一种更快的手段是内部时钟输出功能许多平台支持把PLL输出、系统时钟、外设时钟等信号引到测试引脚上。把每个时钟域分别引出来测量一分钟就能定位到是PLL的问题还是分频器的问题比盲改寄存器高效得多。配置时钟树这事经验再多都不如按流程走。先算参数再配分频等锁定切旁路最后验证频率每一步都别跳。我自己早期调试时为了省那几百微秒跳过PLL锁定等待结果一天到晚和莫名其妙的跑飞作斗争后来老老实实按流程来问题自然消失。做嵌入式开发靠谱的时钟树是地基地基稳了上面的应用才能谈得上稳定。这套E300时钟产生模块的讲解就到这里后面顺着架构继续往下走还会碰到中断控制器、存储系统、外围接口这些大块头一个个来。

相关新闻

LangGraph 初学者入门文档1

LangGraph 初学者入门文档1

结论先行 LangGraph 是一个用于构建有状态、可控的 AI Agent 工作流的编排框架。它把 Agent 的逻辑建模成一张图——节点负责干活,边负责控制流程,状态在整张图中流动。对于初学者,建议从最小的“单节点线形图”开始,逐步加入条件…

2026/10/15 16:51:56 阅读更多 →
MQTT QoS深度解析:报文交换机制与选型建议

MQTT QoS深度解析:报文交换机制与选型建议

1. 从一次实际故障聊起:为什么选错 QoS 会让人半夜爬起来修 先说个我踩过的坑。某次给一套物联网设备做数据采集,传感器每隔几秒上报一次温湿度,我图省事把所有消息都设成了 QoS 0,觉得"丢了就丢了,下一条马上就来…

2026/10/15 16:51:56 阅读更多 →
35kV单侧电源辐射网三段式电流保护整定计算与仿真验证

35kV单侧电源辐射网三段式电流保护整定计算与仿真验证

前段时间帮朋友做一套35kV单侧电源辐射网的继电保护整定方案,核心就是经典的三段式电流保护。说实话,这套东西教材上讲得不少,但真正从短路电流计算、逐段整定、灵敏度校验、时限配合一路做到仿真验证,里面值得抠的细节远比想象中…

2026/10/15 16:51:56 阅读更多 →

最新新闻

Hart主模式协议栈实现:从帧结构到主站轮询的完整落地路径

Hart主模式协议栈实现:从帧结构到主站轮询的完整落地路径

简介:这份资源是面向工业自动化通信开发者的HART主模式协议栈实现代码包,适合已具备嵌入式C基础、需要为智能仪表或控制系统集成HART通信能力的工程师参考。HART协议在4-20mA模拟信号上叠加FSK数字信号,实现模拟与数字共线传输,主…

2026/10/15 17:36:55 阅读更多 →
零基预算怎么落地才不翻车?6步方法论理清口径与流程

零基预算怎么落地才不翻车?6步方法论理清口径与流程

零基预算怎么落地才不翻车?6步方法论理清口径与流程零基预算(ZBB)的口号是"每年从零开始",但真从零开始的企业几乎没有,也很少有企业能撑过次年。翻车的原因通常不是理念不对,而是把它当成了一次…

2026/10/15 17:36:55 阅读更多 →
文件命令实战指南:从批量重命名到高效清理的完整方案

文件命令实战指南:从批量重命名到高效清理的完整方案

文件的应用命令:从日常整理到批量处理,一套思路搞定九成文件场景无论你是开发者、运维,还是日常需要和电脑较劲的办公族,总有一天会被文件逼到墙角:下载了一整年的混乱文档找不到版本、一个目录下面上万张图片要转格式…

2026/10/15 17:36:55 阅读更多 →
MFC调用C# DLL的跨平台桥接实战:C++/CLI封装指南

MFC调用C# DLL的跨平台桥接实战:C++/CLI封装指南

简介:本资源是一份面向C/MFC开发者与.NET跨语言集成学习者的实战型技术包,聚焦解决Windows平台下MFC应用程序调用C#编写的托管DLL这一典型互操作难题。资源包含完整可运行的工程实例,覆盖C# DLL封装、P/Invoke接口定义、MFC项目配置、类型映射…

2026/10/15 17:36:55 阅读更多 →
FastAPI 中 JWT 的基本使用与实践

FastAPI 中 JWT 的基本使用与实践

1. 引言 JWT(JSON Web Token)是目前最流行的无状态认证方案之一。在 FastAPI 中,结合 python-jose 与 passlib 可以快速实现基于 JWT 的用户认证与授权。本文将从零开始,带你掌握 FastAPI 中 JWT 的基本使用与实践。 2. 环境准备 …

2026/10/15 17:36:55 阅读更多 →
从半加器到超前进位:加法器设计原理与Verilog实现

从半加器到超前进位:加法器设计原理与Verilog实现

1. 从半加器到全加器:为什么需要两级结构 很多人学数字电路,学到加法器这一节就开始犯迷糊。教材上先讲半加器,再讲全加器,然后告诉你全加器可以由两个半加器加一个或门拼出来。但为什么要这么拼?直接用一个电路把三个…

2026/10/15 17:35:54 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →