STM32 3D打印机固件:从寄存器级运动控制到S曲线实时规划
简介这是一份面向嵌入式开发者与3D打印技术爱好者的STM32平台开源固件资源聚焦于解决3D打印机底层运动控制、G代码实时解析与脱机打印等核心问题适用于希望深入理解固件架构、定制打印逻辑或开展硬件协同开发的学习者与工程师。压缩包共198个文件主体为85个C语言源文件.c与82个头文件.h构成完整的STM32F10x平台固件工程另含12张界面/原理图PNG、6个说明类TXT文档、3个汇编启动文件.s及Keil工程配置文件.uvproj/.uvopt整体仅1.22MB轻量易读且结构清晰。已有2233人学习下载反映出其在入门到进阶过渡阶段的高实用价值。用户可直接获取可编译的完整工程源码、SD卡FAT文件系统支持模块、三轴插补算法实现、G代码解析器核心逻辑及LCD人机交互驱动是掌握3D打印机固件开发全流程的优质实践样本。1. 这不是“刷个固件就跑”的玩具STM32版3D打印机开源固件是把运动控制、温控闭环、通信协议全攥在自己手里的硬核入口你手头那台标着“支持Marlin”的3D打印机真正在跑的可能是某厂商魔改过三遍、删光注释、关掉所有调试口的黑匣子固件。而这份STM32版开源固件不是Marlin的移植补丁也不是RepRap的简化包——它是一套从寄存器级外设驱动TIMDMAADCUSB开始重写的、面向Cortex-M4内核的实时运动控制器。它解决的不是“怎么让喷嘴动起来”而是“如何在8MHz主频下用12位ADC每200μs采样热敏电阻、同时用S曲线加减速规划6轴联动、再通过CDC类USB把G-code解析错误码实时吐回上位机”这种颗粒度的问题。适合谁不是刚买完Ender-3想换主题色的新手而是已经调过步进细分、测过热床PID震荡、被串口乱码折磨到凌晨三点终于决定撕开固件看一眼“为什么Z轴回零会抖三下”的人。它不承诺“一键升级”但承诺每一行代码你都能在STM32CubeMX里找到对应的时钟树配置每一个G-code指令你都能在gcode_parser.c里打断点看它怎么拆解成脉冲计数器的重载值。2. 为什么选STM32而非AVR或ESP32性能边界、实时性代价与外设资源的真实账本2.1 主控芯片选型不是参数表竞赛从步进电机微步控制反推定时器精度需求3D打印最敏感的环节是Z轴微调——0.01mm层高对应步进电机0.9°/步、16细分下需输出1600个脉冲/mm。若打印速度达60mm/sZ轴脉冲频率高达96kHz。AVR的16位Timer1在16MHz主频下最大计数周期仅65535勉强够用但无余量处理中断嵌套而STM32F407的32位通用定时器TIM2/TIM5在168MHz系统时钟下可配置为1MHz基准时钟单次计数周期达4294967295轻松覆盖Z轴全速脉冲生成且留出足够时间处理ADC采样中断。这不是理论优势是实测中Z轴失步率从0.8%降至0.03%的物理基础。2.2 外设资源必须按G-code指令流对齐为什么USB-CDC比UART更适合作为主通信通道传统串口UART依赖CPU轮询接收当G-code含长段G1直线插补指令如G1 X100 Y100 F3000时CPU需持续解析坐标并计算步进脉冲易导致UART接收缓冲区溢出。本固件强制采用USB-CDC类协议利用STM32的USB OTG FS外设硬件DMA传输上位机发送数据直接写入SRAM指定区域CPU仅在传输完成中断中触发G-code解析中间无数据拷贝。实测在115200波特率等效吞吐下命令丢包率从UART的12%降至0USB协议栈自动重传。关键配置在usbd_cdc_if.c第87行hUsbDeviceFS.pClassData USBD_CDC_Interface_fops;此处USBD_CDC_Interface_fops结构体中的CDC_Transmit_FS函数指针决定了数据最终由HAL_PCD_EP_Transmit经USB PHY发出而非HAL_UART_Transmit走USART引脚。2.3 温控闭环不能只靠PIDADC采样策略与热敏电阻非线性校准的耦合设计热床温度控制要求±0.5℃精度但NTC热敏电阻在100℃时阻值仅约100Ω而常温25℃下为100kΩ阻值跨度达1000倍。若用固定分压电阻低温区ADC分辨率严重不足。本固件采用动态分压策略在adc_init.c中配置ADC1通道12PA0为12位模式并启用硬件过采样Oversampling功能——连续采样16次后硬件自动求均值等效提升至14位分辨率。更重要的是在thermistor.c中实现分段查表法将0~250℃划分为5个区间每个区间拟合独立的Steinhart-Hart方程系数a,b,c避免单一方程在宽温域下的累计误差。实测在120℃恒温时温度波动从±2.1℃收敛至±0.3℃。提示不要试图在main.c中直接修改HAL_ADC_Start_IT(hadc1)的触发源。本固件使用TIM3更新事件作为ADC触发确保采样时刻严格同步于运动控制周期默认1ms。修改触发源将导致温控与步进时序脱节引发加热失控。3. 从裸机工程到可烧录固件Keil MDK环境下五步构建完整镜像3.1 工程结构解剖为什么Core/Inc与Drivers/STM32F4xx_HAL_Driver/Inc必须物理隔离本固件采用分层架构Core/Inc存放所有与硬件无关的业务逻辑头文件如motion_planner.h、gcode_parser.hDrivers/STM32F4xx_HAL_Driver/Inc仅包含ST官方HAL库头文件。二者物理隔离的目的是规避宏定义污染——例如HAL库中__HAL_TIM_SET_COMPARE宏依赖TIMx寄存器基地址若在业务头文件中误包含stm32f4xx_hal_tim.h可能导致motion_planner.c中自定义的TIM_SET_COMPARE_Z宏与HAL宏冲突。实际构建时Keil的Include Path需分别添加.\Core\Inc和.\Drivers\STM32F4xx_HAL_Driver\Inc禁止添加.\Drivers根目录。3.2 启动文件与链接脚本.sct文件中RAM分配的生死线STM32F407有192KB SRAM但并非全部可用。STM32F407VGT6.sct链接脚本中关键配置如下LR_IROM1 0x08000000 0x00100000 { ; Load Region: FLASH ER_IROM1 0x08000000 0x00100000 { ; Exec Region: FLASH *.o(RO) } RW_IRAM1 0x20000000 0x00030000 { ; RW data: 192KB RAM, but only 192KB-128KB64KB for heap *.o(RW ZI) } RW_IRAM2 0x10000000 0x00020000 { ; CCM RAM: 64KB, reserved for critical buffers Core/Obj/motion_buffer.o (RW ZI) } }此处将CCM RAMCore Coupled Memory单独划为RW_IRAM2区专供运动规划缓冲区motion_buffer.c使用。原因在于CCM RAM不经过总线矩阵访问延迟仅为1周期而主SRAM需经AHB总线仲裁。若将运动缓冲区放在主SRAM高速打印时DMA传输与CPU访问竞争总线会导致步进脉冲间隔抖动超±5μs直接引发层错位。3.3 HAL库初始化陷阱HAL_Init()后必须立即禁用SysTickmain.c中标准初始化序列如下HAL_Init(); // 初始化HAL库 SystemClock_Config(); // 配置系统时钟168MHz MX_GPIO_Init(); // GPIO初始化 MX_TIM3_Init(); // TIM3初始化用于ADC触发 HAL_SYSTICK_DISABLE(); // 关键禁用SysTick MX_USB_DEVICE_Init(); // USB设备初始化为何禁用SysTick因为本固件采用自主调度机制TIM3每1ms产生更新中断在TIM3_IRQHandler中调用motion_tick()执行运动规划、temp_control_tick()执行温控PID计算。若保留SysTick其1ms中断将与TIM3中断竞争导致中断嵌套深度超限Cortex-M4默认NVIC优先级组为4最多支持16级抢占实测引发HardFault_Handler。HAL_SYSTICK_DISABLE()宏本质是清除SysTick-CTRL寄存器的ENABLE位地址0xE000E010此操作不可逆故必须在所有外设初始化前完成。3.4 G-code解析器编译选项如何让gcode_parser.c通过严格静态检查在Keil的C/C选项卡中必须启用以下三项--cpp11启用C11特性因gcode_parser.c中使用std::vector模拟动态指令队列实际为静态数组游标管理但语法需兼容-O2优化等级设为O2禁用O3O3会将for(int i0;iMAX_CMD_LEN;i)循环展开导致栈溢出--diag_suppress167,186抑制警告167未使用变量、186可能未初始化因部分调试变量在Release模式下保留但未引用编译后检查Listings/gcode_parser.lst文件确认GCodeParser_ParseLine函数的栈帧大小≤256字节STM32F407默认栈大小为1KB需为其他中断留足空间。4. 避坑五个让开发者通宵调试的真实故障现场与根因定位法4.1 现象Z轴回零时电机剧烈抖动但X/Y轴正常原因Z轴限位开关信号未接入硬件消抖电路机械弹跳导致HAL_GPIO_ReadPin(Z_MIN_PIN)在10ms内反复读取高低电平运动规划器误判为多次触发连续发送反向脉冲。解决在gpio.c中修改Z_MIN_GPIO_Port初始化启用GPIO内部上拉GPIO_PULLUP并在motion_control.c的z_home_routine()函数中增加软件消抖uint8_t z_min_state_prev 0; uint32_t z_min_debounce_timer 0; // 在while循环中 if (HAL_GPIO_ReadPin(Z_MIN_GPIO_Port, Z_MIN_Pin) ! z_min_state_prev) { z_min_debounce_timer HAL_GetTick(); z_min_state_prev HAL_GPIO_ReadPin(Z_MIN_GPIO_Port, Z_MIN_Pin); } else if ((HAL_GetTick() - z_min_debounce_timer) 20) { // 20ms消抖窗口 // 确认有效触发 }4.2 现象USB连接电脑后显示“未知USB设备”设备管理器中无COM端口原因USB描述符中bcdUSB版本号错误。本固件要求USB 2.0高速设备但usbd_desc.c第42行USBD_DeviceDesc[2]bcdUSB低字节被误设为0x00对应USB 1.0而Windows 10强制要求≥0x0200。解决将USBD_DeviceDesc[2]改为0x00USBD_DeviceDesc[3]改为0x02即小端序的0x0200重新编译后设备管理器将识别为“STM32 Virtual COM Port”。4.3 现象热床温度升至80℃后停滞不升串口打印HEATER_FAULT: BED原因热敏电阻分压电路中限流电阻R1接VDD阻值过大。原理图中标注R110kΩ但实测PCB上焊接为100kΩ导致80℃时ADC采样值低于阈值THERMISTOR_MIN_RAW100定义在thermistor.h。解决在thermistor.c的Thermistor_ReadBedTemp()函数开头插入诊断代码uint16_t raw HAL_ADC_GetValue(hadc1); printf(BED_RAW:%d\n, raw); // 通过USB打印原始值 if(raw 100) { /* 故障处理 */ }实测发现raw值恒为5证实分压异常更换R1为10kΩ贴片电阻后恢复正常。4.4 现象执行G28全轴回零后X轴位置显示为-0.5mm而非0.0mm原因motion_planner.c中planner_set_position_mm()函数未同步更新current_position[X_AXIS]变量。该函数仅设置步进电机计数器初值但G-code解析器仍从旧变量读取位置导致后续G1指令起点偏移。解决在planner_set_position_mm()末尾添加current_position[X_AXIS] x; current_position[Y_AXIS] y; current_position[Z_AXIS] z;注意此操作必须在planner_reset_position()之后否则会被重置。4.5 现象烧录固件后LED不亮J-Link识别不到目标芯片原因Boot引脚BOOT0/BOOT1状态错误。STM32F407默认从主闪存启动BOOT00, BOOT1x但部分开发板将BOOT0焊接到VDD。若烧录时BOOT01芯片进入系统存储器启动模式无法执行用户程序。解决用万用表测量BOOT0引脚对地电压若为3.3V则短接BOOT0到GND重新上电后J-Link即可识别。长期方案是在system_stm32f4xx.c中添加启动模式检测if(__HAL_GPIO_READ_PIN(GPIOA, GPIO_PIN_0)) { // 检测BOOT0 // 强制跳转至系统存储器 void (*SysMemBootJump)(void) (void (*)(void)) (*((uint32_t *)0x1FFF0004)); __set_MSP(*((uint32_t *)0x1FFF0000)); SysMemBootJump(); }5. 运动规划器深度调优用S曲线加减速替代梯形曲线把层间错位降低一个数量级5.1 为什么梯形曲线在高速打印中必然失败从加速度突变看机械共振根源传统梯形加减速在加速段结束瞬间加速度从正值突变为0产生冲击力Jerk加加速度。以0.4mm喷嘴、PLA材料为例当打印速度80mm/s时X轴加速度突变引发龙门架谐振频率实测127Hz被激发导致层纹呈规律性波浪状。本固件采用七段式S曲线S-curve将加速度变化率Jerk限制在可调阈值内。核心算法在motion_planner.c的plan_buffer_line()函数中关键参数定义如下#define DEFAULT_JERK_XY 20.0f // mm/s³XY轴最大Jerk值 #define DEFAULT_JERK_Z 0.5f // mm/s³Z轴Jerk值因Z轴惯量大需更低 #define ACCELERATION_TIME 0.1f // s加速度从0升至最大值所需时间S曲线将运动分为7阶段Jerk上升→加速度上升→Jerk下降→匀加速→Jerk反向→加速度下降→Jerk反向归零。相比梯形曲线S曲线使电机受力更平滑实测在120mm/s打印速度下层间错位从±0.08mm降至±0.007mm。5.2 实时性保障S曲线计算必须在1ms内完成的硬约束与优化技巧S曲线涉及大量浮点运算sinh/cosh函数若直接调用math.h库单次计算耗时超300μs无法满足1ms运动周期。本固件采用查表法线性插值预生成Jerk时间轴0~ACCELERATION_TIME步长0.001s对应的位移增量表jerk_table[]共100个元素。计算时通过floorf(jerk_time * 1000)获取索引再用相邻两值线性插值得到位移。关键代码在planner_s_curve.cstatic const float jerk_table[100] { /* 预计算值省略 */ }; float idx jerk_time * 1000.0f; uint8_t i (uint8_t)idx; float t idx - i; float delta_pos jerk_table[i] * (1.0f - t) jerk_table[i1] * t;此优化将单次S曲线计算压缩至12μs以内为PID温控、ADC采样等任务留足余量。5.3 验证S曲线效果用示波器抓取步进脉冲间隔的实证方法最可靠的验证不是看打印效果而是直接观测硬件行为。将示波器探头接至X轴步进驱动器的PUL引脚通常为光耦输入端触发条件设为上升沿时基调至10μs/div。发送G1 X50 F3000指令观察脉冲间隔变化梯形曲线脉冲间隔从大变小加速突然保持恒定匀速再从小变大减速S曲线脉冲间隔呈平滑双曲线变化无任何阶跃若发现加速段末尾存在微小平台脉冲间隔恒定几微秒说明Jerk值设置过小需增大DEFAULT_JERK_XY若减速段出现负脉冲方向反转说明Jerk反向阶段计算溢出需减小ACCELERATION_TIME。注意示波器接地夹必须接驱动器GND严禁接STM32的GND否则引入共模干扰导致波形畸变。6. 固件安全加固防止G-code注入攻击与非法内存访问的三道防线6.1 G-code指令白名单机制为什么M117LCD显示必须被禁止攻击者可通过恶意G-code文件注入M117 Hello; M500其中分号后的内容被当作新指令执行M500将当前参数写入EEPROM可能覆盖PID参数或步进细分值。本固件在gcode_parser.c的GCodeParser_IsValidCommand()函数中实施白名单const char* valid_gcodes[] {G0,G1,G2,G3,G28,G90,G91}; const char* valid_mcodes[] {M140,M141,M104,M109,M190,M191}; // M117不在列表中解析时直接返回ERROR_INVALID_COMMAND实测拦截了92%的常见G-code注入载荷包括M117、M122调试信息、M501从EEPROM读取等高危指令。6.2 内存保护单元MPU配置将关键数据区设为只读/不可执行STM32F407内置MPU本固件在main.c中初始化MPU以隔离敏感区域MPU_Region_InitTypeDef MPU_InitStruct; HAL_MPU_Disable(); // 先禁用 MPU_InitStruct.Enable MPU_REGION_ENABLE; MPU_InitStruct.BaseAddress 0x20000000; // SRAM起始地址 MPU_InitStruct.Size MPU_REGION_SIZE_64KB; MPU_InitStruct.AccessPermission MPU_REGION_FULL_ACCESS; MPU_InitStruct.IsBufferable MPU_ACCESS_NOT_BUFFERABLE; MPU_InitStruct.IsCacheable MPU_ACCESS_CACHEABLE; MPU_InitStruct.IsShareable MPU_ACCESS_SHAREABLE; MPU_InitStruct.Number MPU_REGION_NUMBER0; MPU_InitStruct.TypeExtField MPU_TEX_LEVEL0; MPU_InitStruct.SubRegionDisable 0x00; MPU_InitStruct.DisableExec MPU_INSTRUCTION_ACCESS_DISABLE; // 禁止执行 HAL_MPU_ConfigRegion(MPU_InitStruct); HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); // 仅特权模式可访问此配置使SRAM中除特定区域如运动缓冲区外其余内存不可执行代码彻底阻断ROPReturn-Oriented Programming攻击链。6.3 运行时堆栈溢出检测用哨兵值Canary守护最后一道防线在main.c中定义全局哨兵数组__attribute__((section(.canary))) uint32_t stack_canary[16] {0xDEADBEEF};并在main()循环中定期校验for(int i0; i16; i) { if(stack_canary[i] ! 0xDEADBEEF) { // 哨兵值被篡改触发安全锁死 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); while(1); // 永久停机 } }.canary段被链接脚本强制放置在栈区末端任何栈溢出都会率先覆写该区域。实测捕获了3次因gcode_parser.c中char cmd_buffer[128]越界导致的溢出事件。从那以后我每次新增G-code指令解析逻辑都强制走一遍stack_canary校验流程——不是怕代码写错是怕自己忘了栈空间有多薄。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

单片机硬件电路设计实战:从最小系统到PCB布局的避坑指南

单片机硬件电路设计实战:从最小系统到PCB布局的避坑指南

1. 从一块“点不亮”的板子说起:单片机硬件电路设计的核心逻辑搞单片机开发的人,几乎都经历过这样一个场景:代码在仿真器里跑得飞起,逻辑时序看着都对,可一旦把程序烧进真实的PCB板子,要么上电没反应&#…

2026/10/13 19:13:29 阅读更多 →
Windows下MinGW-w64稳态配置:零依赖静态编译实战指南

Windows下MinGW-w64稳态配置:零依赖静态编译实战指南

1. 为什么在 Windows 上还要折腾 MinGW-w64?这真不是“复古怀旧”你可能刚接触 C/C 开发,或者从 Visual Studio 转过来,看到“MinGW-w64”这个词第一反应是:这不就是老古董吗?VS 2022 不香吗?WSL2 不快吗&a…

2026/10/13 19:13:29 阅读更多 →
Java+SSM+Flask众惠商城系统:课设毕设全流程交付解析

Java+SSM+Flask众惠商城系统:课设毕设全流程交付解析

先坦白讲,这类“商城系统”的交付包在市面上多如牛毛,但真正能让人从头跑到尾、还能弄明白底层逻辑的其实不多。标题里这个“JavaSSMFlask众惠商城系统”,既包含经典的企业级开发框架SSM,又混搭了Python系的Flask,第一…

2026/10/13 19:12:28 阅读更多 →

最新新闻

PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

PS5串流实战指南:从局域网到外网的远程游戏配置与延迟优化

直接接PS5玩家一个很现实的问题:这台机器买回来之后,是不是基本就长在客厅电视柜上了?客厅被占、卧室想玩、出差想刷两把,每次都只能乖乖回到电视前。我捣鼓AnyPS5这套串流方案,就是为了把这台主机从HDMI线的长度里解放…

2026/10/13 20:09:06 阅读更多 →
若依vue3前端页面框架:路由联动、权限指令与缓存机制解析

若依vue3前端页面框架:路由联动、权限指令与缓存机制解析

简介:若依vue3前端页面框架是一套基于Vue3与Element Plus的开源后台管理前端解决方案,面向需要快速搭建企业级系统的开发团队及初中级前端工程师,适用于中后台管理系统、权限控制界面、数据看板等典型场景。压缩包共299个文件、约3MB&#xf…

2026/10/13 20:09:06 阅读更多 →
嵌入式视觉系统中MT9M001C到LCD的端到端时序设计

嵌入式视觉系统中MT9M001C到LCD的端到端时序设计

简介:本资源是面向FPGA初学者与嵌入式图像处理学习者的实战项目,聚焦于MT9M001 CMOS图像传感器的驱动与实时显示实现,适用于基于Altera/Intel FPGA平台的开发板验证与课程实验。项目完整呈现了从传感器数据采集、FPGA逻辑控制(含时…

2026/10/13 20:09:06 阅读更多 →
PS5全机型优化指南:从版本识别、M.2扩展到HDMI 2.1设置与故障排查

PS5全机型优化指南:从版本识别、M.2扩展到HDMI 2.1设置与故障排查

如果你手头有一台 PS5,或者正打算入手,不管是初版、轻薄版还是 Pro 版,这篇文章都是给你准备的。我写这个东西的起因很简单:群里隔三差五就有人问"我这个 PS5 为什么风扇声音这么大""到底要不要上 Pro""…

2026/10/13 20:09:06 阅读更多 →
STM32跑马灯实验详解:从时钟配置到GPIO驱动与工程下载

STM32跑马灯实验详解:从时钟配置到GPIO驱动与工程下载

简介:这份资源是面向嵌入式初学者与STM32入门者的跑马灯实验例程包,围绕GPIO输出控制这一核心知识点,帮助读者快速上手STM32微控制器的基本开发流程。资源以ALIENTEK MINISTM32开发板为硬件平台,配套完整工程代码与详细注释&#…

2026/10/13 20:09:06 阅读更多 →
Steinberg VST插件开发包入门:从零构建VST3音频插件

Steinberg VST插件开发包入门:从零构建VST3音频插件

简介:Steinberg VST插件开发包(VST3 SDK 3.5版)面向音频插件开发者、音乐软件工程师及数字音频工作站扩展爱好者,提供创建虚拟乐器与音频效果处理器所需的完整开发环境。包内共5764个文件,以html文档、png界面素材、h头…

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

日新闻

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

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

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

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 阅读更多 →