STM32红外NEC协议解码实战:从原理到稳定实现的避坑指南
1. 项目缘起从一次“失控”的空调说起去年夏天我手头一个基于STM32的智能家居中控项目遇到了一个不大不小的麻烦。项目需要集成红外遥控学习功能用来控制客厅里的一台老式美的空调。我信心满满地接好了红外接收头用逻辑分析仪抓取了原装遥控器的波形然后开始对着NEC协议的数据手册写解码程序。本以为是个标准操作结果却让人哭笑不得中控发出的指令十次里有八次空调没反应剩下两次要么是开了制冷却调到30度要么是打开了扫风模式。项目眼看要延期我开始从头排查这才发现红外NEC协议解码这个看似简单的任务里面藏着不少从数据手册上看不到的“坑”。红外遥控几乎是每个嵌入式开发者都会接触到的技术。它成本低廉、技术成熟广泛应用于家电、玩具等领域。而NEC协议则是红外遥控领域事实上的“普通话”绝大多数消费电子产品的红外遥控都兼容或基于此协议。对于STM32这类单片机来说实现NEC协议解码是检验其定时器、外部中断和GPIO应用能力的经典课题。但很多人包括当时的我容易把它想得太简单以为就是按照协议规定的时序去判断0和1结果在实际环境中却要面对信号畸变、环境光干扰、不同厂商的协议变种等一系列问题。今天我就结合那次踩坑和后续多个项目的实战经验为你彻底拆解如何在STM32上稳定、可靠地实现红外NEC协议解码。我们不止于读懂协议更要搞定从硬件连接到软件滤波从基础解码到处理“非标”信号的完整方案。无论你是正在做课程设计的学生还是需要为产品添加红外控制功能的工程师这篇内容都能让你避开我走过的弯路。2. NEC协议核心不止于0和1的时序逻辑在动手写代码之前我们必须吃透NEC协议的本质。很多教程只告诉你“引导码是9ms低电平4.5ms高电平”但这远远不够。理解其设计哲学才能写出健壮的代码。2.1 协议帧结构为何如此设计一帧完整的NEC协议数据通常由以下几部分组成引导码Start Code一个9ms的载波脉冲低电平紧接着一个4.5ms的空闲高电平。这个超长的、独特的信号就像广播里的报时音用于唤醒接收端并告诉它“注意下面要开始传数据了” 它的长度远大于数据位这为接收端的自动增益控制和噪声过滤提供了时间窗口。用户码Customer Code8位地址码用于区分不同厂家的设备。例如索尼的电视和松下的空调就有不同的用户码防止互相干扰。通常还会发送这8位的反码逻辑取反作为校验所以实际传输16位。接收端会同时检查原码和反码是否匹配这是第一道简单的容错机制。数据码Data Code8位命令码即具体的按键指令如“音量加”、“开机”。同样其后也跟随8位命令反码。结束位Stop Bit一个560μs的脉冲后跟随一段空闲。有时在连按按键时它会被简化为一个单独的560μs脉冲后面直接跟下一帧的引导码称为“重复码”。这个“原码反码”的双重传输机制是NEC协议在无线环境下的一个巧妙设计。它用极小的开销多传8位实现了单比特错误的检测在早期单片机处理能力有限、无线环境干扰大的背景下大大提升了可靠性。2.2 数据位的编码脉宽调制的奥秘NEC协议采用脉冲位置调制PPM的一种变体具体来说是脉冲宽度编码。逻辑‘0’由一个560μs的载波脉冲低电平和560μs的空闲高电平组成总周期为1.125ms。逻辑‘1’由一个560μs的载波脉冲低电平和1.69ms的空闲高电平组成总周期为2.25ms。这里有一个至关重要的细节无论是‘0’还是‘1’其起始部分都是一个560μs的脉冲。这个脉冲是载波信号通常为38kHz调制产生的。区别仅在于脉冲之后的高电平持续时间不同。这意味着接收端硬件一体化红外接收头在收到信号时会先解调掉38kHz的载波输出一个反向的电平信号。我们单片机检测的是这个解调后的波形。所以我们在示波器或逻辑分析仪上看到的“低电平”实际上对应着红外发射管正在发射光脉冲。理解这一点就能明白为什么我们的解码程序核心是测量两个下降沿之间的时间间隔。因为每个数据位都以一个下降沿脉冲开始为起点我们测量从这个下降到下一个下降沿的时间如果接近1.125ms则是‘0’如果接近2.25ms则是‘1’。2.3 示波器下的真实世界协议变种与噪声如果你用示波器去实测一个美的空调遥控器可能会发现它的引导码不是严格的9ms4.5ms可能是8.8ms4.4ms。数据位的脉宽也可能有微小的偏差。这就是“协议变种”。NEC协议是一个事实标准不同厂商在具体参数上会有细微调整但只要编码规则一致通常都能兼容。更麻烦的是环境噪声。日光灯、白炽灯、甚至阳光中都含有红外成分会被接收头拾取产生随机的低电平毛刺。这些毛刺如果被误判为数据位的起始下降沿就会导致解码完全错误。这就是我项目初期失败的主要原因——没有做有效的软件滤波。3. 硬件连接与信号调理给STM32一双“好耳朵”稳定的解码始于干净的信号。红外接收头如VS1838B、HS0038的选择和电路设计是第一步。3.1 一体化红外接收头不只是接三根线常用的一体化接收头有三个引脚VCC3.3V/5V、GND、OUT信号输出。它内部已经集成了红外接收管、前置放大器、带通滤波器中心频率38kHz和解调电路。你只需要给它供电它就能输出解调后的数字信号。注意务必在VCC和GND之间就近放置一个10uF~100uF的电解电容和一个0.1uF的瓷片电容用于电源去耦。红外接收头在工作时电流会有瞬间变化不稳定的电源会导致输出信号抖动产生误触发。这是我早期用面包板调试时踩过的坑加上电容后解码稳定性立竿见影。接收头的OUT引脚需要连接到STM32的GPIO。这里有一个关键决策点使用外部中断模式还是定时器输入捕获模式外部中断模式将GPIO配置为下降沿触发的外部中断。每个下降沿脉冲开始进入中断在中断服务函数中记录时间戳通过SysTick或通用定时器并计算时间间隔来判断是引导码、数据‘0’还是数据‘1’。这种方法直观对初学者友好但中断频繁一帧数据多达68个边沿在系统繁忙时可能丢失中断。定时器输入捕获模式将一个定时器的输入捕获通道配置为捕获该GPIO的下降沿。硬件会自动在边沿发生时记录定时器计数器的值并产生中断。你只需要在中断中读取两次捕获值的差值即可得到高电平或低电平的持续时间。这种方法更精确对CPU占用率更低是更专业的选择。对于追求稳定性和低功耗的产品我强烈推荐使用定时器输入捕获模式。下面我们以STM32F103C8T6的TIM2_CH1PA0引脚为例进行配置。3.2 定时器输入捕获配置详解我们目标是测量高电平的持续时间。NEC协议中无论是引导码还是数据位有用的信息都编码在高电平的宽度里。GPIO初始化将PA0配置为浮空输入或上拉输入因为接收头输出默认高电平。定时器初始化以TIM2为例。时钟源内部时钟APB1总线通常72MHz。预分频器PSC设置为71。这样定时器时钟 72MHz / (711) 1MHz即计数器每1微秒计数一次。这个精度足够测量毫秒和微秒级的红外信号。自动重装载值ARR设置为最大值0xFFFF65535。因为我们只关心两次捕获之间的差值ARR设大一些避免溢出65.535ms内必须处理完一次捕获对NEC协议绰绰有余。捕获/比较通道1配置为输入捕获模式捕获下降沿。开启捕获中断。中断服务函数逻辑这是解码的核心。第一次下降沿引导码开始记录捕获值IC1Value1然后将捕获边沿改为上升沿。第一次上升沿引导码低电平结束记录捕获值IC1Value2。计算差值IC1Value2 - IC1Value1这个值应该在9000左右对应9ms允许一定误差如±500。如果符合说明检测到引导码准备接收数据。然后将捕获边沿改回下降沿并清空数据缓冲区。后续的下降沿数据位开始对于数据位我们关心的是前一个上升沿到当前下降沿之间的时间即高电平持续时间。所以需要在每次上升沿时记录时间戳LastRiseTime。在下降沿中断中用当前捕获值减去LastRiseTime得到高电平持续时间HighLevelTime。如果HighLevelTime在1000~1350微秒之间理论1125μs则判定为逻辑‘0’。如果HighLevelTime在1600~2000微秒之间理论1690μs则判定为逻辑‘1’。将判断出的位存入缓冲区。重复上述过程直到收齐32位数据用户码16位数据码16位或超时。这种利用输入捕获自动测量脉宽的方式比在外部中断里手动开定时器要精准和可靠得多。4. 软件解码实战状态机与鲁棒性设计直接写一堆if-else来判断各种状态会让代码难以维护且容易出错。更好的方法是使用有限状态机FSM。对于NEC解码我们可以定义以下几个状态typedef enum { IR_IDLE, // 空闲状态等待引导码 IR_LEADER_CODE, // 已收到引导码等待用户码/数据码 IR_REPEAT_CODE, // 处理重复码连按 IR_ERROR // 错误状态 } IR_DecodeState_t;在定时器输入捕获的中断服务函数或由它触发的回调函数中我们根据当前状态和测量到的时间值进行状态转移和数据收集。4.1 解码状态机流程IR_IDLE状态当捕获到下降沿并测得低电平持续时间在8ms~10ms范围内且紧随其后的高电平持续时间在4ms~5ms范围内则判定为有效的引导码。状态转移到IR_LEADER_CODE复位位计数器bit_cnt 0清空数据缓冲区ir_data 0。IR_LEADER_CODE状态在此状态下我们开始按位接收数据。每次进入下降沿中断就根据前一个高电平的持续时间判断位值。将判断出的位值0或1移位存入ir_data。例如ir_data (ir_data 1) | bit_value。位计数器bit_cnt加1。当bit_cnt 32时表示一帧数据接收完成。接下来进行数据校验将收到的32位数据拆分为address高8位、~address次8位、command次次8位、~command低8位。检查address与~address是否互为反码command与~command是否互为反码。如果两者都通过则认为解码成功将address和command存入结果变量并设置一个标志位如ir_ok 1通知主循环。如果校验失败则转入IR_ERROR状态。无论成功与否解码完成后状态都回到IR_IDLE等待下一帧。重复码的处理当按键被长时间按住时遥控器不会发送完整帧而是先发一帧完整数据之后每隔约110ms发送一个特殊的“重复码”。重复码由9ms低电平和2.25ms高电平再加一个560μs的脉冲组成。在IR_IDLE状态如果捕获到一个下降沿且测得的前一个高电平持续时间在2.0ms~2.5ms之间对应重复码的2.25ms高电平则可以判定为重复码。此时状态转移到IR_REPEAT_CODE我们可以直接复用上一次成功解码的command并设置ir_repeat 1标志通知主循环“同一个键被持续按下”。处理完后状态回到IR_IDLE。IR_ERROR状态发生任何不符合预期的时序如位间隔超时、校验失败都进入此状态。在此状态可以记录错误类型或简单地复位所有变量然后无条件跳转回IR_IDLE状态。使用状态机后代码逻辑清晰易于调试和扩展。主循环只需要轮询ir_ok和ir_repeat标志即可。4.2 超时处理与软件滤波对抗干扰的盾牌这是保证解码鲁棒性的关键也是很多简单示例代码缺失的部分。位超时Bit Timeout在IR_LEADER_CODE状态每收到一个位都应该启动一个超时计时器可以用SysTick或另一个定时器。超时时间应略大于一个逻辑‘1’的周期2.5ms比较安全。如果在超时时间内没有收到下一个下降沿则认为本帧数据传输出错可能被噪声打断应强制跳转到IR_ERROR状态。这能有效防止因丢失一个边沿而导致程序永远卡在等待状态。帧间静默Inter-frame Gap在成功解码一帧或处理完重复码后可以故意让解码器进入一个短暂的“沉默期”例如10-20ms在此期间忽略所有外部中断或捕获事件。因为红外接收头在信号结束后可能还会输出一些杂波这个沉默期可以过滤掉它们防止误触发。数字滤波Digital Filtering对于GPIO输入STM32的硬件有可配置的消抖滤波功能但对于高速的红外信号微秒级通常不适用。更有效的软件滤波是“多次采样判决”。例如在判断下降沿时可以在中断中连续快速读取几次GPIO电平如果都是低电平才认为是真正的下降沿。这可以滤除极窄的噪声毛刺。但要注意这会增加中断处理时间需要权衡。动态阈值调整不要使用绝对固定的时间阈值如1125μs来判断‘0’和‘1’。可以在一帧数据开始时用测量到的引导码高低电平时间作为基准进行比例计算。例如测得引导码高电平为T_leader_high那么数据位高电平的判断阈值可以设为(T_leader_high / 4.5) * 1.125和(T_leader_high / 4.5) * 1.69附近的一个范围。这样能更好地适应不同遥控器的微小差异。5. 调试与验证让问题无处遁形写好了代码怎么知道它能不能用除了直接对着设备测试我们还需要更科学的调试手段。5.1 逻辑分析仪解码过程的“X光机”逻辑分析仪是调试数字通信协议的利器。将探头连接到红外接收头的OUT引脚和STM32的某个调试GPIO用于在代码中打点。抓取原始波形按下遥控器抓取完整的波形。验证引导码、数据位的波形是否符合预期。测量具体的时间参数用于校准你代码中的判断阈值。验证解码逻辑在STM32代码中每当成功解码一帧就让一个调试GPIO引脚翻转一次。在逻辑分析仪上同时观察这个引脚和红外信号。你可以清晰地看到每次红外信号结束后是否立即有一次翻转从而确认解码是否成功触发。你甚至可以把这个调试引脚当成一个简单的“解码成功”指示灯。5.2 串口打印内部状态的“监视器”通过串口将解码过程中的关键信息打印出来是最直接的调试方法。在收到引导码时打印“Leader Code Detected”。每收到一个位打印其值0/1和测量到的高电平时间。在完成一帧接收时打印出原始的32位数据以及解析出的地址码和命令码。在遇到错误时打印错误类型如“Timeout Error”, “Check Sum Error”。这样当解码失败时你可以通过串口日志一步步回溯看是在哪个环节出了错是时间测量不准还是状态机逻辑有漏洞。5.3 示波器实测深入信号的微观世界当遇到特别棘手的干扰问题时示波器比逻辑分析仪更能看清信号的细节。你可以观察到接收头输出的信号基线是否平稳有没有上下漂移低电平的底部有没有毛刺或振铃环境光干扰如快速开关日光灯在信号线上产生了什么样的噪声根据观察到的现象回头调整你的硬件如加强电源滤波、在接收头OUT引脚对地加一个小电容吸收尖峰或软件如调整滤波算法、超时时间。6. 进阶与扩展从解码到应用当你能够稳定解码NEC信号后就可以在此基础上构建更复杂的功能。6.1 构建红外信号数据库码库一个实用的红外学习型遥控器需要存储不同设备的编码。你可以设计一个简单的数据结构来管理typedef struct { uint16_t vendor_id; // 厂商ID用户码 uint8_t func_code; // 功能码命令码 char func_name[20]; // 功能描述如“Power”, “Vol” // 如果需要学习重复码间隔也可以存储 } IR_Command_t;通过“学习模式”将遥控器对准你的设备按键程序解码后把address和command存入Flash或EEPROM。在“发射模式”下根据存储的码值控制一个红外发射管需连接三极管驱动按照NEC协议格式发送出去。注意发射时需要用一个定时器如PWM模式产生38kHz的载波来调制信号。6.2 处理非标准NEC协议正如前文所述很多设备如我遇到的那台美的空调使用的是NEC协议的变种。它们的差异可能在于引导码长度不同。逻辑‘0’和‘1’的脉宽比例不同但‘1’总是‘0’的两倍左右。数据格式不同可能只有16位8位地址8位命令没有反码或者地址码是16位。应对策略就是让你的解码程序可配置化。不要将时间阈值写成死代码而是定义成变量typedef struct { uint16_t leader_low_min; uint16_t leader_low_max; uint16_t leader_high_min; uint16_t leader_high_max; uint16_t bit0_high_min; uint16_t bit0_high_max; uint16_t bit1_high_min; uint16_t bit1_high_max; uint8_t data_bits; // 总位数32或16 uint8_t with_inverse; // 是否包含反码 } IR_ProtocolConfig_t;为不同的设备预定义不同的配置结构体。在解码前先尝试用几种常见的配置去匹配引导码匹配成功后再用该配置进行后续数据位的解码。这就实现了一个简单的“自动协议识别”功能。6.3 低功耗设计考量如果设备是电池供电需要时刻监听红外信号那么功耗就很重要。一体化接收头本身在工作时就有一定电流约0.5-1mA。一种常见的优化是周期性唤醒让STM32和接收头大部分时间处于睡眠模式每隔几十毫秒唤醒一次快速检查一下是否有红外信号可以通过检查GPIO电平简单判断如果没有立即再次休眠。虽然可能丢失信号头部的几个毫秒但NEC协议的引导码很长有很大概率能捕捉到。这需要结合STM32的低功耗模式Stop模式来设计。从一次失败的空调控制开始到最终实现一个稳定可靠、能适应多种设备的红外解码模块这个过程让我对嵌入式开发中的“细节魔鬼”有了更深的认识。红外NEC解码就像一门基础内功它考验的是你对硬件定时器的掌握、对中断服务的理解、对状态机编程的熟练度以及最重要的——在充满噪声的真实世界中设计鲁棒性系统的能力。代码不仅仅要在实验室里跑通更要在客厅的日光灯下、在午后的阳光下稳定工作。当你按下遥控器设备应声而动的那一刻你会觉得所有这些关于时序、滤波、状态转移的思考都是值得的。

相关新闻

Agent 如何拆解任务:从经典范式到真实产品

Agent 如何拆解任务:从经典范式到真实产品

Agent 如何拆解任务一个反直觉的事实:当你问 Claude Code "重构这个支付模块"时,它不会一次性生成完整方案,而是边探索边决策、边执行边调整。这不是模型不够强,而是 Agent 任务拆解的本质——不是"一次性规划&quo…

2026/10/18 20:45:32 阅读更多 →
Tkinter窗口图标设置全攻略:跨平台兼容性与专业UI实现

Tkinter窗口图标设置全攻略:跨平台兼容性与专业UI实现

1. 项目概述:为什么你的Tkinter窗口需要一个专属Logo? 如果你用Python的Tkinter库做过图形界面,大概率遇到过这个情况:程序运行后,窗口左上角、任务栏图标,甚至程序坞里,显示的永远是那个默认的…

2026/10/19 19:09:11 阅读更多 →
天津网约车租赁靠谱品牌怎么选?看这几点

天津网约车租赁靠谱品牌怎么选?看这几点

随着网约车出行需求持续增长,天津网约车租赁市场吸引了大量从业者进入。但对于许多想入行的司机来说,面对市面上琳琅满目的租赁公司,如何挑选到一家可靠、合规、性价比高的服务商,成为摆在面前的第一道难题。结合行业现状与司机实…

2026/10/18 21:50:59 阅读更多 →

最新新闻

用A4纸拼出广告牌:低成本大幅面打印的完整工作流与创意实践

用A4纸拼出广告牌:低成本大幅面打印的完整工作流与创意实践

最近路过街头时看到一台摆在路边的打印机,身边围了一圈人,正一张接一张地往外吐A4纸,旁边贴了半面墙的成品。凑近一看才发现,那根本不是一张普通的"打印演示",而是在现场打印一整个广告牌——用最普通的A4纸…

2026/10/19 20:56:16 阅读更多 →
极小函数依赖集求解算法:拆、删、消三步与手算例题

极小函数依赖集求解算法:拆、删、消三步与手算例题

函数依赖的极小化,大概是数据库原理课里最让人“背得下定义却下不了笔”的考点了。提到极小函数依赖集,多数人都能背出三条:右部单属性、没有冗余依赖、没有冗余属性。可真给你一张函数依赖集F,让你求Fmin,很多人第一步…

2026/10/19 20:55:12 阅读更多 →
数据可视化全流程实操:Python+Seaborn从选图到避坑

数据可视化全流程实操:Python+Seaborn从选图到避坑

某高校的数据能力提升营走到第7天,主题就是数据可视化。这个营我们内部一直叫它“疏锦行”,名字听着文艺,实际任务却很务实:一周时间,从数据采集一路练到统计建模,而第7天这一天,不带任何新模型…

2026/10/19 20:55:12 阅读更多 →
线性回归从手写梯度下降到sklearn实战:原理、特征工程与过拟合避坑

线性回归从手写梯度下降到sklearn实战:原理、特征工程与过拟合避坑

如果你只会调包,那线性回归等于没学会作为数据分析或者机器学习入门的第一课,线性回归几乎是所有人都会遇到的第一个模型。我见过太多人上来就from sklearn.linear_model import LinearRegression,然后fit、predict、打印个 R 就算完事。真要…

2026/10/19 20:55:12 阅读更多 →
达梦数据库大小写敏感机制详解:从原理到实践避坑

达梦数据库大小写敏感机制详解:从原理到实践避坑

1. 项目概述:达梦大小写敏感到底是个什么事做数据库开发或者运维的朋友,只要是第一次接触达梦数据库,十有八九会遇到一个让人摸不着头脑的现象:明明建表时写的是 "USER_INFO",去查询的时候写 "user_inf…

2026/10/19 20:52:07 阅读更多 →
C++ std::bind实战:占位符、引用陷阱与lambda取舍

C++ std::bind实战:占位符、引用陷阱与lambda取舍

1. 我为什么又回头研究bind:代码里最不起眼的粘连剂搞C时间一长,你会发现真正让代码"绕起来"的往往不是那些宏大设计,而是一堆不起眼的小工具。std::bind就是其中之一。最近接手的某调度模块里,回调参数七零八落&#x…

2026/10/19 20:52:07 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →