STM32F103外部晶振从8MHz升级16MHz:硬件匹配、软件配置与系统验证全攻略
1. 从8MHz到16MHz一次看似简单却暗藏玄机的时钟升级最近在调试一块基于STM32F103C8T6的老项目板子手头正好缺8MHz的晶振翻箱倒柜只找到几颗16MHz的。一个念头冒出来能不能直接把外部晶振从8MHz换成16MHz来用毕竟STM32F103最高支持72MHz主频外部时钟源翻个倍理论上内部PLL倍频一下系统时钟SYSCLK应该还是能跑到72MHz性能说不定还能提升。这个想法听起来很直接但实际操作起来从硬件焊接、软件配置到系统稳定性的验证每一步都藏着不少细节。如果你也遇到了类似情况或者单纯想了解如何安全地修改STM32的外部时钟源这篇从踩坑到稳定的全过程记录或许能给你一些参考。简单来说将STM32F103的外部高速晶振HSE从8MHz改为16MHz核心目标通常是维持最终的系统时钟频率不变例如经典的72MHz同时利用更高精度的外部时钟源。但这个过程绝非修改一两个宏定义那么简单。它涉及到硬件电路的匹配性检查、启动文件与时钟树配置的联动修改、以及修改后对整个系统特别是外设时序的全面验证。搞错了轻则芯片无法启动串口乱码重则系统运行不稳定出现各种灵异故障。接下来我就结合这次实操把从原理分析、具体步骤到验证排坑的完整链路拆解清楚。2. 硬件改动前的必修课为什么不能直接焊上就用在拿起烙铁之前我们必须先理解硬件层面的约束。STM32F103的时钟系统允许外部高速晶振HSE的频率范围是4-16MHz。所以从8MHz换到16MHz在频率范围上是合规的。但是合规不等于直接兼容硬件上至少有三个关键点需要确认。2.1 负载电容的匹配计算最容易被忽略的细节晶振旁边通常有两个小电容接地这就是负载电容CL1和CL2。它们的值不是随便选的必须与晶振的负载电容CL参数匹配才能让晶振在标称频率下稳定起振。公式是C~L1~ C~L2~ ≈ 2 * (C~L~ - C~s~)。其中C~L~是晶振规格书上标称的负载电容比如12pF或20pFC~s~是STM32引脚和PCB走线带来的寄生电容通常估算为3-5pF。假设原8MHz晶振的C~L~20pF我们按C~s~5pF估算那么原板上的负载电容计算值约为 2*(20-5)30pF所以每个电容大概是15pF。现在换成了16MHz晶振如果它的C~L~是12pF那么所需的负载电容就变成了 2*(12-5)14pF每个电容应该是7pF左右。如果你直接把16MHz晶振焊上去而板子上还是原来的15pF电容就会导致晶振的负载电容偏大可能引起启动困难、频率偏移甚至不起振。注意在动手前务必找到新16MHz晶振的数据手册确认其标称负载电容C~L~值并重新计算所需的匹配电容值。如果板子空间允许最好更换为计算出的新值。如果条件不允许也要心里有数这可能是后续不稳定性的一个潜在根源。2.2 晶振驱动级别与ESR的考量STM32的HSE OSC驱动能力可以通过RCC_CR寄存器中的HSEON和HSERDY位来控制但更底层的是晶振本身的特性。一般来说频率越高对晶振等效串联电阻ESR的要求也越高。8MHz晶振通常ESR较低容易起振。而一些低成本或非标的16MHz晶振可能ESR较高在STM32默认的驱动强度下可能无法可靠启动。虽然多数情况下STM32的振荡器驱动能力足够强但如果你换上新晶振后发现无法启动用示波器测不到波形在排除电容问题后可以尝试在RCC_CR寄存器中通常通过库函数配置确保HSE的驱动模式设置正确对于STM32F1通常就是使能HSE没有额外的驱动强度配置位这点和F4系列不同或者考虑更换一个品牌更可靠、ESR参数明确的16MHz晶振。2.3 PCB布局的隐性影响高频晶振对布局更敏感。16MHz相比8MHz其谐波和噪声频率也更高。如果原板针对8MHz设计晶振走线过长、靠近噪声源或底层有高速信号线穿过在16MHz下这些问题可能会被放大导致时钟信号质量下降增加电磁干扰EMI。理想的晶振布局是尽量靠近芯片的OSC_IN和OSC_OUT引脚走线短而直用地线包围下方铺地。改动前可以评估一下原板布局如果原布局就很“随意”那么改为16MHz后时钟稳定性面临的风险会更大。3. 软件配置的深度改造修改HAL库与标准库的完整流程硬件确认或调整妥当后就进入了软件配置的核心环节。这里以最常见的将系统时钟配置为72MHz为目标分别讲解使用HAL库和标准外设库SPL的修改方法。核心逻辑是外部时钟HSE翻倍了为了维持最终72MHz的系统时钟内部PLL的倍频系数必须减半。3.1 基于HAL库的修改步骤以STM32CubeIDE为例如果你用的是STM32CubeMX生成代码或直接使用HAL库修改主要集中在两个文件stm32f1xx_hal_conf.h和system_stm32f1xx.c或通过CubeMX图形化配置。第一步修改stm32f1xx_hal_conf.h中的HSE_VALUE这是最关键的一步它告诉HAL库外部晶振的实际频率。/* 原配置8MHz */ #define HSE_VALUE ((uint32_t)8000000U) /* 修改为16MHz */ #define HSE_VALUE ((uint32_t)16000000U)第二步调整PLL倍频系数维持72MHz SYSCLKSTM32F103的时钟树中系统时钟SYSCLK的来源之一是通过PLL倍频。PLL的输入可以是HSE或HSI输出频率计算公式为PLL输出 PLL输入源频率 * PLL倍频因子PLLMUL。当HSE为8MHz时通常配置PLLMUL为9得到 8MHz * 9 72MHz。当HSE改为16MHz后为了得到72MHzPLLMUL必须改为 72 / 16 4.5。但是PLLMUL的倍频系数必须是整数且STM32F103的PLL倍频系数可选值为2、3、4、5、6、7、8、9、10、11、12、13、14、15、16。4.5不在可选范围内因此直接使用16MHz HSE通过PLL无法精确得到72MHz。这里有三种主流策略策略A使用16MHz HSEPLLMUL设为4得到64MHz SYSCLK。这是最直接、最稳定的方法。虽然性能比72MHz略低约下降11%但所有外设时钟如APB1、APB2都能基于64MHz进行整数分频系统稳定可靠。修改system_stm32f1xx.c中的SystemCoreClock更新值并在SystemInit函数或通过CubeMX将PLLMUL配置为4。策略B使用16MHz HSEPLLMUL设为9得到144MHz。这超出了STM32F103的最大额定频率72MHz绝对不可行会导致芯片过热或功能异常。策略C使用内部HSI8MHz作为PLL源PLLMUL设为9得到72MHz。这实际上放弃了使用外部16MHz晶振作为系统时钟核心来源的优势精度和稳定性。此时16MHz晶振可能仅用于RTC等其他外设或者干脆不用。这背离了我们更换晶振的初衷。对于绝大多数应用我强烈推荐策略A接受64MHz的系统时钟。修改CubeMX配置或直接修改代码在CubeMX的Clock Configuration标签页将PLL Source Mux选择为HSE然后将PLLMUL设置为PLL Multiplier 4。检查SYSCLK是否自动计算为64MHz。HCLKAHB总线时钟通常等于SYSCLK64MHz。PCLK1APB1总线时钟给定时器2-7、SPI2/I2C2等需手动设置为32MHz最大36MHz即64MHz的2分频。PCLK2APB2总线时钟给定时器1/8、SPI1、ADC等可设置为64MHz最大72MHz。第三步更新延时函数等相关代码如果你的工程中有基于SystemCoreClock系统内核时钟频率实现的微秒级延时函数如HAL_Delay的底层依赖或自定义的delay_us需要确保其基准频率已更新。SystemCoreClock变量会在SystemClock_Config()函数中被更新但一些自定义的软件延时循环可能需要你手动调整循环计数值。例如原基于72MHz计算的延时循环在64MHz下需要将计数值乘以 72/64 ≈ 1.125 来补偿。3.2 基于标准外设库SPL的修改步骤如果你还在使用经典的标准外设库修改思路类似但文件位置不同。第一步修改stm32f10x.h中的HSE_VALUE/* 原配置 */ #define HSE_VALUE ((uint32_t)8000000) /* 修改为 */ #define HSE_VALUE ((uint32_t)16000000)第二步修改系统初始化代码中的时钟配置通常在main()函数开头调用的SystemInit()或你自己编写的RCC_Configuration()函数中。找到设置PLL倍频系数的部分将RCC_PLLMul_9改为RCC_PLLMul_4。// 原8MHz配置目标72MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // 改为16MHz配置目标64MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4);同时更新后续的分频系数确保APB1时钟不超过36MHzAPB2不超过64MHz因为SYSCLK64MHz。RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB时钟 SYSCLK 64MHz RCC_PCLK1Config(RCC_HCLK_Div2); // APB1时钟 32MHz RCC_PCLK2Config(RCC_HCLK_Div1); // APB2时钟 64MHz第三步更新system_stm32f10x.c中的SystemCoreClock这个文件里有一个SystemCoreClock变量需要确保它被正确更新为64MHz64000000。通常SystemInit()函数或你调用SetSysClock()函数后会更新它但最好在初始化后手动确认或赋值一次。4. 启动文件与向量表的隐秘关联这是一个高级且容易出错的点特别是当你使用从外部Flash启动、或者涉及中断的应用时。STM32的启动文件如startup_stm32f103xb.s中定义了初始堆栈指针和复位向量。而向量表的位置与系统时钟频率无关但与编译器和链接器设置有关。时钟频率的改变本身不会影响向量表。但是有一种间接关联如果你因为更换晶振而改变了系统时钟频率并且你的应用程序中使用了精确时序操作例如通过SysTick或定时器实现的任务调度、软件延时那么这些时序的基准就变了。虽然这不直接修改启动文件但你需要确保依赖于时钟的所有初始化代码包括在main()之前运行的、可能在启动文件中调用的某些初始化钩子都基于新的时钟频率进行了正确计算。更直接的风险在于调试器配置。在IDE如Keil MDK、IAR的工程设置中你可能会指定外部晶振频率用于调试和下载。例如在Keil的Options for Target - Target标签页有一个Xtal (MHz)选项。这里必须从8改为16以确保调试器能正确与芯片通信特别是在进行Flash编程和硬件单步调试时。如果这里不改调试器可能无法正确识别芯片状态导致下载失败或调试异常。5. 修改后的全面验证与故障排查清单焊好晶振改完代码编译下载这只是第一步。接下来必须进行系统性的验证确保修改后的系统稳定可靠。5.1 基础验证时钟树关键节点测量HSE起振验证使用示波器或逻辑分析仪测量OSC_IN和OSC_OUT引脚通常是PA0/PA1或PB0/PB1具体看数据手册。上电后应能看到稳定的16MHz正弦波或方波取决于探头和测量点。如果看不到波形检查晶振是否焊反无源晶振一般不分正反但贴片晶振要留意方向标记负载电容是否焊接良好、值是否合适RCC_CR寄存器中的HSEON位是否已置1HSERDY位是否在延时后置1系统时钟SYSCLK验证可以通过两种方式间接验证软件读取在代码中读取RCC_CFGR寄存器的SWS位确认系统时钟源是PLL。然后通过一个GPIO翻转来测量。例如将某个GPIO配置为推挽输出在无限循环中置高、置低用示波器测量翻转频率。如果系统时钟是64MHz一条简单的GPIO_SetBits和GPIO_ResetBits指令循环其周期会非常短需要插入NOP指令或通过定时器来产生可测量的频率如1Hz的LED闪烁。MCO引脚输出将STM32的微控制器时钟输出MCO功能配置为输出SYSCLK。在RCC_CFGR寄存器中配置MCO位源选择为SYSCLK并将对应的GPIO通常是PA8配置为复用推挽输出模式。用示波器测量该引脚应看到64MHz的方波如果系统配置正确。这是最直接的硬件验证方法。外设时钟验证检查关键外设的时钟是否在允许范围内。例如通过RCC_GetClocksFreq函数HAL库或读取相关寄存器确认APB1时钟为32MHzAPB2时钟为64MHz。特别要留意连接到APB1上的外设如USART2/3其最大时钟是36MHz32MHz是安全的。5.2 外设功能与时序验证时钟是系统的心跳它的改变会影响几乎所有依赖时序的外设。串口通信USART这是最容易暴露问题的外设。波特率计算公式为波特率 f~PCLKx~ / (USARTDIV)。其中f~PCLKx~是串口所在总线的时钟USART1在APB2其他在APB1。当时钟从72MHz变为64MHz后相同的波特率分频器USARTDIV计算出的实际波特率会变化。例如原72MHz下配置115200波特率的分频值在64MHz下实际波特率会变为约102400导致通信乱码。必须根据新的APB时钟重新计算并设置波特率寄存器使用HAL库的HAL_UART_Init函数传入的波特率参数会自动根据当前时钟重新计算。定时器TIM定时器的计数频率来源于其所在APB总线的时钟可能还会经过一个x1或x2的预分频具体见参考手册。当时钟基准变化定时器产生中断或PWM的频率也会同比变化。需要检查所有使用定时器的模块如软件定时、PWM输出、输入捕获等重新计算预分频器PSC和自动重载值ARR以确保输出频率或定时周期符合预期。系统滴答定时器SysTickSysTick通常用于提供HAL_Delay或操作系统的心跳。它的重载值是基于SystemCoreClock计算的。HAL库的HAL_Init()函数会自动根据HSE_VALUE和时钟配置重新初始化SysTick。但如果你有直接操作SysTick寄存器的代码需要手动更新重载值。模拟数字转换器ADCADC的时钟来自APB2最大14MHz。原72MHz系统下APB2时钟可能是72MHz需要分频如6分频得到12MHz。现在APB2时钟是64MHz分频系数可能需要调整如4分频得到16MHz但已超14MHz极限需改为6分频得到约10.67MHz。必须确保ADC时钟不超过14MHz。5.3 稳定性与边界条件测试修改时钟后需要进行长时间、高负荷的稳定性测试。全速运行测试让CPU执行密集运算如循环计算、浮点操作同时开启多个外设串口持续收发、PWM输出、ADC采样持续运行数小时甚至更长时间观察系统是否会出现死机、复位或外设异常。电源波动测试在电源输入端施加小幅纹波或进行开关干扰观察时钟系统是否敏感。更高频率的晶振有时对电源噪声更敏感。温度范围测试如果条件允许在高温和低温环境下测试系统功能。晶振的频率会随温度漂移不同频率和切割方式的晶振温漂特性不同。确保在应用环境的整个温度范围内系统时钟及衍生时序都能正常工作。6. 进阶考量当64MHz无法满足性能需求时如果你确实需要接近72MHz的性能且对时钟精度要求不是极端苛刻还有一种折中方案使用16MHz HSE但通过PLL的非整数倍频配置逼近72MHz。STM32F103的PLL虽然不能配置小数倍频但我们可以通过配置PLL输入预分频器PLLXTPRE和PLL倍频器PLLMUL的组合得到一个接近72MHz的值。查阅数据手册PLL的输入可以是HSE或HSI并且HSE可以经过一个2分频器PLLXTPRE后再进入PLL。那么我们可以将16MHz的HSE先2分频得到8MHz然后再用PLL乘以9最终得到72MHz。配置如下RCC_PLLSource_HSE_Div2HSE 2分频RCC_PLLMul_99倍频这样PLL输出 (16MHz / 2) * 9 72MHz。完美但是这里有一个巨大的陷阱这个2分频器PLLXTPRE只存在于某些STM32F1系列型号中并非所有STM32F103都有这个配置位在标准外设库的头文件stm32f10x_rcc.h中RCC_PLLSource_HSE_Div2这个宏定义可能不存在或者在你的具体型号中硬件不支持。强行使用可能导致无法预料的行为。因此在尝试此方法前必须仔细查阅你所使用具体型号的STM32F103数据手册和参考手册确认RCC_CFGR寄存器中是否存在PLLXTPRE位。在CubeMX中查看如果PLL源选择下拉菜单中没有“HSE/2”的选项则很可能不支持。如果不支持那么“HSE 16MHz - PLL x4 - 64MHz”就是最稳妥、最通用的方案。7. 总结与个人实操建议回顾整个将STM32F103外部晶振从8MHz改为16MHz的过程它远不止是更换一个元器件和改一个宏定义。这是一次对硬件匹配性、时钟树理解和系统级验证的全面考验。从我个人的实操经验来看给出以下几点最终建议首先明确你的核心需求。如果只是为了“有晶振能用”那么接受64MHz的系统时钟是最快、最稳的方案性能损失在多数应用中感知不强。如果是为了追求更高的时钟源精度例如用于高精度定时或通信那么16MHz晶振本身的精度和温漂指标可能比8MHz的更好即使系统频率降为64MHz其定时精度依然受益于更精准的源头。其次硬件是基础软件是桥梁验证是保障。焊接前务必核对负载电容修改代码时要透彻理解时钟树逐项检查所有外设时钟配置下载后必须进行从时钟信号到应用功能的完整验证链测试。示波器是硬件调试的利器务必用好。最后做好备份和记录。在修改前备份一份能正常工作的8MHz版本代码和原理图。每次修改配置都在代码中添加清晰的注释说明更改原因和日期。这能在出现问题需要回溯时节省大量时间。修改时钟是嵌入式开发中的一项基本功也是深入理解单片机如何“心跳”的绝佳机会。这次从8MHz到16MHz的改动虽然最终系统频率没有提升但让我对STM32的时钟树、硬件振荡电路和系统稳定性有了更立体的认识。希望这份详细的踩坑指南能帮你更从容地应对类似的硬件变更挑战。

相关新闻

C++11核心特性实战指南:从auto到智能指针的现代编程

C++11核心特性实战指南:从auto到智能指针的现代编程

1. 项目概述:为什么C11值得你投入时间?如果你还在用着老旧的C98标准,或者对C的印象还停留在“复杂”、“难用”、“内存管理噩梦”的阶段,那C11对你来说,可能是一次认知上的彻底刷新。我刚开始接触C11时,感…

2026/10/16 20:56:01 阅读更多 →
UART与USART核心区别:从异步通信到同步通信的硬件设计解析

UART与USART核心区别:从异步通信到同步通信的硬件设计解析

1. 项目概述:从“串口”说起,为何要区分UART和USART?搞嵌入式开发或者玩单片机的朋友,对“串口”这个词肯定不陌生。它就像设备之间最基础的“对话”通道,调试信息输出、模块数据交换、固件升级,哪一样都离…

2026/10/16 20:55:09 阅读更多 →
数字永生技术解析:当代码成为灵魂的载体

数字永生技术解析:当代码成为灵魂的载体

数字永生技术解析:当代码成为灵魂的载体 最近,一个关于"数字生命"的话题在技术社区引发了激烈的讨论。这不仅仅是一个哲学命题,更是一个正在落地的技术挑战。我们在网络上看到了两种截然不同的声音:一种来自技术前沿的…

2026/10/15 11:44:43 阅读更多 →

最新新闻

AI原生中转平台选型指南:五大形态与实操避坑

AI原生中转平台选型指南:五大形态与实操避坑

“折腾”这个词,在开发者圈子里大概能排进最耗心神事情的前三名。尤其是当你需要用大模型做点正经东西时——不是写个Demo玩,而是想稳定跑在业务里、让团队其他成员也能接手维护——那个酸爽感,谁趟过谁知道。调用不同厂商的接口要维护各自的…

2026/10/16 20:57:22 阅读更多 →
AI学术改写工具全解析:从口语化清理到术语规范化

AI学术改写工具全解析:从口语化清理到术语规范化

1. 项目概述1.1 这个工具到底在解决什么问题先说实话,我最初接触到这个项目时,第一反应是“学术写作这件事,真的能被工具自动化吗?”但实际用下来,发现它解决的问题比我想象中要具体得多。很多研究者,尤其是…

2026/10/16 20:57:22 阅读更多 →
制造业知识图谱落地实践:从质量溯源到设备故障诊断

制造业知识图谱落地实践:从质量溯源到设备故障诊断

“知识图谱”这个概念热了好几年,从互联网到金融,再到工业界,各路厂商和布道者把前景讲得天花乱坠,但真正落到制造业产线上、能持续用起来并且产生真金白银价值的案例,并不多。我在几家制造企业做过知识图谱相关的项目…

2026/10/16 20:57:22 阅读更多 →
机器学习学习器分类与实战:监督与无监督算法选型指南

机器学习学习器分类与实战:监督与无监督算法选型指南

1. 从一堆模型里挑花眼说起:ML学习器的分类逻辑刚接触机器学习那会儿,我最头疼的不是数学公式,而是sklearn里那一长串模型名字。分类的、回归的、聚类的混在一起,文档翻来翻去也不知道该用哪个。后来项目做多了才慢慢摸出门道&…

2026/10/16 20:57:22 阅读更多 →
C#桌面端麦克风录音实战:NAudio方案选型、参数配置与避坑指南

C#桌面端麦克风录音实战:NAudio方案选型、参数配置与避坑指南

1. 桌面端录音这件事,远比想象中要细C# 做电脑麦克风录音,听起来像是个入门级需求,真动手写起来才发现坑一个接一个。我最早接触这个方向是给一个内部会议记录工具做音频采集模块,当时想的是调个 API 拿数据写文件就完事了&#x…

2026/10/16 20:57:22 阅读更多 →
动作即token:RT-2如何让视觉语言模型直接操控机器人

动作即token:RT-2如何让视觉语言模型直接操控机器人

Google DeepMind 的 RT-2 论文发出来那天,我们实验室群里直接炸了。不是因为模型规模有多大——55B 在这个年代早就不是什么新鲜事,而是因为它的做法极简到让人怀疑:把机器人末端执行器的连续动作,直接离散成文本词表里的 token&a…

2026/10/16 20:56:20 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →