STM32驱动舵机:PWM时基、定时器映射与舵机协议三重校准
简介本资源是一套基于STM32F10x系列的伺服电机数字控制完整工程源码面向嵌入式初学者、自动化控制课程实践者及机器人/精密设备开发工程师解决单片机驱动高精度执行机构的核心问题——即通过PWM生成、PID闭环调节与硬件外设协同实现伺服电机的精准角度与速度控制。压缩包共71个文件含32个C源文件如main.c、timer.c、dda.c等负责主控逻辑与运动算法、30个H头文件定义寄存器配置、模块接口与硬件抽象层以及链接脚本.ld、CubeMX配置.ioc、构建配置.xml等关键工程文件整体仅246KB轻量但结构完整便于快速编译调试。已有6783人学习下载代码组织体现典型固件库开发范式从CMSIS底层启动、时钟/中断/IO初始化到G代码解析、温度/位置反馈处理、串口通信等模块分层清晰可直接用于教学实验、毕业设计或小型机电控制系统原型开发。1. STM32 控制伺服电机源码不是抄个库就能转起来而是搞懂 PWM 时基、定时器通道映射和舵机协议的三重校准你手头有一块 STM32F103C8T6 最小系统板、一个 SG90 或 MG996R 舵机、几根杜邦线——但把网上搜到的“STM32 舵机控制源码”烧进去后电机要么纹丝不动要么抖动如癫痫要么转到一半突然归零。这不是代码有 bug而是你跳过了最致命的一环STM32 的定时器输出不是“给个占空比就转角度”而是必须在硬件层严格对齐舵机通信协议的脉宽窗口0.5–2.5ms、周期基准20ms与 GPIO 复用功能的实际映射关系。本篇不讲 HAL 库封装玄学也不堆砌 CubeMX 截图只聚焦一线实操中反复验证过的最小可行路径从寄存器级 TIMx_CHy 配置出发用标准外设库SPL或裸机方式在 F1 系列上稳定驱动模拟舵机。适合刚焊完板子、示波器探头已接好、想绕过所有抽象层直接看到 PWM 波形的嵌入式开发者。如果你正被“为什么 TIM2_CH1 输出正常换成 TIM3_CH2 就失锁”、“为什么用 SysTick 延时调角度会漂移”这类问题卡住这篇就是为你写的血泪复盘。2. 从协议到底层为什么 SG90 的 1.5ms 对应 90°而 STM32 的 ARR/CRR 值必须反推计算舵机不是直流电机它内部是闭环控制系统外部输入的是周期为 20ms 的 PWM 信号高电平持续时间脉宽决定目标角度。SG90 典型参数为0.5ms → 0°1.5ms → 90°2.5ms → 180°。注意——这个“20ms 周期”是硬性要求偏差超过 ±1ms 就可能触发舵机保护或响应迟滞而“0.5–2.5ms 脉宽”范围内的线性度实际由舵机内部电位器和 PID 回路决定STM32 只负责精准生成这个波形。这就决定了我们不能用通用延时函数模拟 PWM比如 while 循环高低电平必须启用高级定时器TIM1/TIM8或通用定时器TIM2–TIM5的PWM 模式 1向上计数OCxM011并严格配置自动重装载值ARR决定 PWM 周期捕获/比较寄存器值CCR决定高电平时间时钟源与预分频PSC决定计数频率精度以最常用的 STM32F103C8T672MHz HCLK为例若选用 TIM2挂载在 APB1最大 36MHz要生成 20ms 周期需满足[ \text{Period} \frac{(ARR 1) \times (PSC 1)}{f_{\text{CLK}}} 20,\text{ms} ]取 PSC 71即 72MHz / 72 1MHz 计数频率则[ ARR 1 1,\text{MHz} \times 20,\text{ms} 20000 \quad \Rightarrow \quad ARR 19999 ]此时计数器每 1μs 加 1满 20000 溢出一次周期即为 20ms。再算脉宽0.5ms 500μs → CCR 4991.5ms 1500μs → CCR 14992.5ms 2500μs → CCR 2499。提示CCR 值必须 ≤ ARR否则高电平恒为 1全占空比舵机会堵转或报警。这是新手最常翻车的第一步。2.1 选定定时器与 GPIO 通道为什么 TIM2_CH1 比 TIM3_CH4 更可靠不是所有定时器通道都能任意映射到任意 GPIO。STM32F103 的 AFIO复用功能重映射存在硬性约束。例如定时器通道默认 GPIO重映射后 GPIO注意事项TIM2CH1PA0PA15部分型号PA0 无重映射冲突最简配TIM3CH2PA7PB5需开启 AFIO_RMAPPB5 同时是 SPI1_MOSI默认复用优先级高TIM4CH3PB8—PB8 也是 I2C1_SCL易受上拉干扰实测结论首次调试强烈推荐使用TIM2_CH1 → PA0。原因有三PA0 是默认复用引脚无需配置 AFIO_MAPR 寄存器避免重映射失败导致无输出TIM2 属于 APB1 总线与系统时钟同源相位抖动小大量开发板如 Blue Pill将 PA0 引出至排针方便示波器探头直连。若坚持用 TIM3务必确认RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TIM3, ENABLE);已开启GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);是否必要查芯片手册 Table 10PA6/PA7TIM3_CH1/CH2是否被其他外设如 ADC1_IN6/IN7占用。2.2 初始化 TIM2 为 PWM 模式寄存器级配置逻辑与关键参数说明以下为标准外设库SPL实现等效于手动操作 TIM2-ARR、TIM2-PSC、TIM2-CCER 等寄存器void TIM2_PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 1. 开启时钟TIM2 和 GPIOA RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA, ENABLE); // 2. 配置 PA0 为复用推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; // 必须是 AF_PP非 GPIO_Mode_Out_PP GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 3. 定时器基础配置72MHz → APB136MHz → PSC71 → 1MHz 计数频率 TIM_TimeBaseStructure.TIM_Period 19999; // ARR 19999 → 20ms 周期 TIM_TimeBaseStructure.TIM_Prescaler 71; // PSC 71 → 分频后 1MHz TIM_TimeBaseStructure.TIM_ClockDivision 0; // 不分频 TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); // 4. PWM 输出通道配置CH1模式1初始占空比 1.5ms (90°) TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; // 关键必须是 PWM1 模式 TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 1499; // CCR 1499 → 1.5ms TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM2, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能预装载避免运行中突变 // 5. 启动定时器与主输出TIM2 无 MOE此步可省略 TIM_Cmd(TIM2, ENABLE); }参数说明与踩坑点TIM_OCMode_PWM1向上计数时当CNT CCR输出高电平若误设为PWM2则逻辑反转舵机可能反向或拒动TIM_OCPreload_Enable开启预装载寄存器CCR1 shadow register确保 CCR 值在更新事件UEV后才生效避免运行中修改导致波形毛刺TIM_OutputState_Enable必须显式使能通道输出否则即使 CNT 和 CCR 正确PA0 也无信号GPIO_Mode_AF_PP复用推挽是强制要求GPIO_Mode_Out_PP仅支持普通 GPIO 输出无法触发定时器硬件输出。3. 角度控制函数如何把 0–180° 映射成安全、线性的 CCR 值并规避整数溢出陷阱直接写TIM_SetCompare1(TIM2, angle * 10 500)是危险的——它隐含了两个假设1角度与脉宽严格线性2乘法结果不会溢出 16 位 CCR 寄存器最大 65535。而实际中SG90 的 0.5–2.5ms 范围对应 CCR 499–2499基于前述 ARR19999有效 CCR 区间仅 2000 个值超出即失控。3.1 安全映射公式带边界钳位与浮点补偿的工业级写法// 将角度 0–180° 映射为 CCR 值基于 ARR19999, PSC71 // 公式推导pulse_us 500 (angle / 180.0) * 2000 → CCR pulse_us - 1 uint16_t AngleToCCR(uint8_t angle) { if (angle 180) angle 180; // 强制上限 float pulse_us 500.0f ((float)angle / 180.0f) * 2000.0f; // 0.5ms ~ 2.5ms uint16_t ccr (uint16_t)(pulse_us 0.5f); // 四舍五入避免 truncation 误差 if (ccr 2499) ccr 2499; if (ccr 499) ccr 499; return ccr; } // 使用示例设置 45° TIM_SetCompare1(TIM2, AngleToCCR(45)); // 返回 999 → 0.999ms → 实测约 45°为什么用浮点而非整数运算整数除法angle * 2000 / 180在 angle1 时结果为 1111μs但真实需求是 511.11μs → CCR511浮点计算保留小数精度0.5f 四舍五入后转整型比(angle * 2000 90) / 180这类整数技巧更鲁棒。3.2 避免舵机“咔哒”声与抖动加入软启动与步进延迟舵机内部电机惯性大瞬间从 0° 跳到 180° 会触发电流冲击和机械撞击。实测有效策略步进式更新每次只改变 1–2°间隔 10–20ms起始/终止缓冲在目标角度前后 5° 内降低步进速度。void Servo_SweepTo(uint8_t target_angle, uint16_t step_ms) { uint8_t current ReadCurrentAngle(); // 需自行实现角度反馈如电位器 ADC或记录上一角度 int8_t step (target_angle current) ? 1 : -1; while (abs((int8_t)target_angle - (int8_t)current) 1) { current step; TIM_SetCompare1(TIM2, AngleToCCR(current)); Delay_ms(step_ms); // 使用 SysTick 或定时器中断延时禁用阻塞式 for 循环 } // 最后一步精确到位 TIM_SetCompare1(TIM2, AngleToCCR(target_angle)); }注意Delay_ms()必须基于 SysTick 中断或独立定时器绝不可用 for 循环延时——否则 CPU 占用 100%无法响应其他任务且延时精度差受编译器优化影响。4. 常见问题排查5 条血泪经验总结覆盖 90% 的“舵机不转”场景现象、原因、解决一条一条写清楚不绕弯子。4.1 现象PA0 用万用表测到 3.3V但舵机完全不动原因万用表只能测直流电压无法捕捉 PWM 高频方波。舵机需要的是周期性脉冲不是恒定高电平。解决立即接示波器到 PA0确认是否有 20ms 周期、0.5–2.5ms 可调脉宽的方波。若无波形检查TIM_Cmd(TIM2, ENABLE)是否执行、TIM_OC1Init()中TIM_OutputState_Enable是否设置。4.2 现象示波器看到波形但舵机抖动剧烈或原地打转原因脉宽超限CCR 499 或 2499导致舵机进入保护模式或电源电流不足SG90 堵转电流达 600mAUSB 口仅 500mA。解决用TIM_SetCompare1(TIM2, 1499)锁定 1.5ms观察是否停稳改用外部 5V/2A 电源给舵机供电GND 与 STM32 共地检查AngleToCCR()函数是否做了边界钳位。4.3 现象同一份代码在 A 板上正常B 板上舵机缓慢右偏原因B 板的晶振负载电容不匹配常见于山寨 Blue Pill导致 HSE 实际频率偏离 8MHz进而使 APB1 时钟计算错误ARR/PSC 值失效。解决用示波器测 PA0 波形实际周期若为 22ms则需重新计算 PSC[ \text{Real } f_{\text{CLK}} \frac{8,\text{MHz} \times \text{PLL_MUL}}{\text{HSE_PRE}} \quad \Rightarrow \quad \text{调整 PSC 使周期回归 20ms} ]或改用内部 RC 振荡器HSI8MHz校准牺牲精度换稳定性。4.4 现象调用TIM_SetCompare1()后角度跳变但无平滑过渡原因未启用预装载TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable)导致 CCR 寄存器直写计数器当前值与新 CCR 冲突产生单周期毛刺。解决确认初始化中已调用TIM_OC1PreloadConfig()且TIM_ARRPreloadConfig(TIM2, ENABLE)也开启ARR 同样需预装载。4.5 现象多舵机控制时某一路突然停止响应原因多个定时器共用 APB1 总线高频率更新如 100Hz 以上引发总线竞争或 GPIO 初始化顺序错误先开时钟后配 GPIO。解决为每路舵机分配独立定时器TIM2/TIM3/TIM4避免同一 TIMx 多通道争抢严格按“开时钟 → 配 GPIO → 配 TIM → 使能 TIM”顺序执行若必须多路改用 DMA 触发定时器更新释放 CPU。5. 进阶技巧用定时器编码器模式读取舵机实际位置构建闭环反馈系统纯开环控制无法应对负载变化、齿轮间隙或温度漂移。高端方案是加装电位器10kΩ 线性到舵机输出轴通过 ADC 采样其分压值反推真实角度。但更优雅的方式是——复用 STM32 定时器的编码器接口Encoder Mode前提是舵机改装为带 AB 相增量式编码器的版本如 MG996R 改装套件。本节聚焦标准舵机的低成本闭环思路。5.1 电位器 ADC 方案硬件连接与软件滤波SG90 内部已含电位器只需破开外壳飞线引出三端VCC/GND/WIPER至 STM32 的 ADC1_IN0PA0。注意PA0 此时不能再用作 TIM2_CH1需换到 PA1 或 PB0。// 初始化 ADC1采样 PA0电位器 wiper void ADC1_Init(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_ADC1 | RCC_APB2PERIPH_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; // 模拟输入 GPIO_Init(GPIOA, GPIO_InitStructure); ADC_DeInit(ADC1); ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode ENABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55_5Cycles); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); } // 带中值滤波的 ADC 读取消除接触噪声 uint16_t ADC_ReadFiltered(void) { uint16_t buf[5]; for (int i 0; i 5; i) { buf[i] ADC_GetConversionValue(ADC1); Delay_us(100); } // 排序取中值 for (int i 0; i 4; i) { for (int j i 1; j 5; j) { if (buf[i] buf[j]) { uint16_t t buf[i]; buf[i] buf[j]; buf[j] t; } } } return buf[2]; }标定方法将舵机手动旋至 0°机械限位读取 ADC 值adc_min旋至 180°读取adc_max则实时角度 (adc_val - adc_min) * 180 / (adc_max - adc_min)。5.2 闭环 PID 控制让舵机自己“找角度”有了反馈即可实现简单位置式 PID参数典型值作用Kp0.8比例项加快响应过大则振荡Ki0.02积分项消除静态误差过大则超调Kd0.1微分项抑制抖动过大会放大噪声typedef struct { float kp, ki, kd; float setpoint; // 目标角度 float prev_error; float integral; } PID_Controller; float PID_Update(PID_Controller* pid, float feedback) { float error pid-setpoint - feedback; pid-integral error; float derivative error - pid-prev_error; float output pid-kp * error pid-ki * pid-integral pid-kd * derivative; pid-prev_error error; return output; // 输出作为 CCR 调整量 } // 主循环中调用 PID_Controller pid {.kp0.8, .ki0.02, .kd0.1, .setpoint90.0}; while(1) { float adc_val ADC_ReadFiltered(); float angle_fb MapADCtoAngle(adc_val); // 映射为 0–180° float pwm_adj PID_Update(pid, angle_fb); uint16_t ccr_target AngleToCCR(pid.setpoint) (int16_t)(pwm_adj * 10); // 缩放系数 TIM_SetCompare1(TIM2, ccr_target); Delay_ms(20); }血泪经验PID 参数必须在线整定。先关 Ki/Kd调 Kp 至临界振荡再加 Ki 消除静差最后微调 Kd 抑制超调。我曾在某图像云台项目中因 Kp 设为 2.0 导致舵机连续 3 小时高频抖动最终烧毁齿轮组——这颗后悔药建议你早点含着。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

RAG项目自建AI基础设施的陷阱与务实落地路线图

RAG项目自建AI基础设施的陷阱与务实落地路线图

1. 被“自建平台”绑架的RAG项目过去一年多,我参与过好几个企业级RAG(检索增强生成)项目的评审和落地咨询。一个非常普遍的现象是:项目刚立项,技术团队的第一反应往往是“我们要自建一套AI基础设施平台”。理由听起来也…

2026/10/13 20:08:06 阅读更多 →
知识工作者的数字外挂:插件选型与实践复盘

知识工作者的数字外挂:插件选型与实践复盘

知识工作者的数字外挂:一套插件的选型思路与实践复盘这两年,我越来越觉得“知识工作”这个词被低估了。很多人以为写文档、做分析、查资料就是知识工作,但真正每天泡在这些流程里的人才会懂——最耗时间的从来不是思考本身,而是思…

2026/10/13 20:08:06 阅读更多 →
LiDAR360点云数据处理全流程:从格式转换到工程落地

LiDAR360点云数据处理全流程:从格式转换到工程落地

简介:《LiDAR360激光雷达点云数据处理软件用户手册》是一份面向测绘、林业、电力等行业从业者的官方技术文档,系统介绍 LiDAR360 V2.2 的点云数据整理、分析与成果输出方法。手册围绕航带拼接、数据管理、统计、分类、地形、机载林业、地基林业、电力线及…

2026/10/13 20:08:06 阅读更多 →

最新新闻

鸽哒IM源码:生产级私有化即时通讯系统解析

鸽哒IM源码:生产级私有化即时通讯系统解析

简介:这是一套完整的跨平台即时通讯(IM)系统源码,面向中高级Java/Android/iOS开发者及全栈工程师,用于学习和搭建企业级实时通信服务。资源涵盖Web(WebSocketHTML5)、Android(JavaFC…

2026/10/13 21:08:58 阅读更多 →
Python+React低代码平台:元数据驱动的业务系统快速构建方案

Python+React低代码平台:元数据驱动的业务系统快速构建方案

简介:这是一套面向全栈开发初学者与低代码实践者的前后端一体化低代码平台学习资源,聚焦React前端框架与Python后端框架的协同开发模式,帮助非专业开发者快速构建可运行的Web应用,降低传统编码门槛。资源共229个文件,涵…

2026/10/13 21:08:58 阅读更多 →
2020数学建模B题沙漠穿越:Matlab动态规划与剪枝实战解析

2020数学建模B题沙漠穿越:Matlab动态规划与剪枝实战解析

简介:面向备战2020年数学建模B题的参赛者,完整Matlab源代码覆盖四关求解流程,从第一关基础路径规划到第四关随机天气下的最优策略,涉及距离矩阵处理、单目标优化、动态规划、数学期望与随机分布建模等方法。第二关重点解决双地图与…

2026/10/13 21:08:58 阅读更多 →
CEF4Delphi 控件:Delphi 与 JavaScript 双向通信及避坑指南

CEF4Delphi 控件:Delphi 与 JavaScript 双向通信及避坑指南

简介:CEF4Delphi控件是一套面向Delphi开发者的Chromium谷歌内核浏览器集成方案,适合需要在桌面程序中嵌入现代网页渲染能力的开发者,覆盖从Delphi 7到Delphi 10.2的多个版本,作者已亲自测试调试安装正常。资源包共462个文件&#…

2026/10/13 21:08:58 阅读更多 →
数据库大作业图书销售系统:核心是约束设计而不是页面数量

数据库大作业图书销售系统:核心是约束设计而不是页面数量

简介:面向数据库课程大作业的图书销售管理系统数据库设计文档,完整覆盖从问题描述、需求分析、概念模型设计、逻辑模型设计到建立数据库、录入数据及数据库操作的全过程,并配有全局与局部ER图、表结构、外键关系说明,以及实施中遇…

2026/10/13 21:08:58 阅读更多 →
Java 8 Stream 实战指南:从传统循环到声明式流水线

Java 8 Stream 实战指南:从传统循环到声明式流水线

如果你写过几年 Java 业务代码,大概率见过这类场景:一个方法里塞了三四个 for 循环,循环里面套 if,if 里面再往 List 或 Map 里 put 数据,看完要花好几分钟才理清楚这段逻辑到底在干嘛。这种代码不能说错,但…

2026/10/13 21:07:57 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →