GT911触摸屏I2C地址之谜:双地址由引脚状态决定,驱动调试避坑指南
一块触摸屏驱动调了两天最后发现是I2C地址的问题这事说起来有点丢人但也挺典型。项目是在一颗国产MCU上驱动GT911电容触摸屏本来以为照着手册和参考代码写个初始化就行结果上电后设备ID死活读不出来总线也探测不到ACK。后来换了一个地址才跑通当时脑子里第一反应是“怎么会这样手册里不是只写了一个地址吗”等把所有资料翻了一遍才搞清楚原来GT911这颗芯片内置了两个I2C地址而且启动时用哪个地址是由引脚状态和上电时序决定的。这个知识点很多参考例程里没有明确写网上一搜也是一堆零散说法整理一下希望对搞嵌入式的朋友有点帮助。1. 一块纠结了两天的触摸板双地址现象是怎么暴露的1.1 最初的故障现象当时手头有一块某厂商的7寸触摸屏模组触摸控制芯片是GT911接口是I2C。按照常见例程里的思路我先把触摸芯片的复位引脚和中断引脚接到MCU的两个GPIO上然后初始化时先拉低复位再释放复位延时一段时间接下来用0x28这个7位地址去读芯片的寄存器期望读到0xBA、0x91这样的设备ID。结果很直接I2C总线上一片死寂主设备发完地址字节之后从设备那边连一个ACK都没回。用逻辑分析仪抓波形看起来信号电平也正常上拉电阻也加了SCL、SDA时序也没毛病但就是探测不到这颗芯片。当时心里还挺笃定觉得是不是PCB上焊盘虚焊了或者芯片供电没起来。于是拿万用表量了VDD、VDDIO电压都正常reset引脚的电平也符合预期。又把I2C速率从400k降到了100k再试结果还是一样。1.2 怀疑地址不对的过程后面开始怀疑是不是参考代码里那个地址有问题就去翻芯片手册。手册里画了I2C读时序标注的地址是0x28/0x29这种写法但令人困惑的是手册正文里又说“可通过配置选择第二个地址”最后在应用笔记里才看到一句关键信息GT911支持两个I2C设备地址默认是0x287位另一个常见的是0x147位具体用哪个取决于上电瞬间INT引脚和RESET引脚的状态组合。看到这里有点豁然开朗马上把初始化时的I2C地址从0x28改成0x14再次给芯片上电然后发了一个读设备ID的请求结果非常顺利ACK正常读出来的ID也是0xBA911。那一刻真的意识到这个双地址不是文档里随便提一句的功能而是出厂后就实实在在存在的两种默认状态。后面我又分别用0x28和0x14去读同一个芯片在断电重新上电后两个地址分别是可以读到ID的但同一时刻只有一个地址能通。这就说明地址不是两个同时生效而是启动时根据外部引脚状态二选一锁存之后整个运行期间固定不变。1.3 为什么这块板子默认落在了0x14我手上的模组INT引脚可能被外部上拉到VDDIO而RESET引脚在释放复位时也处于高电平按GT911的地址选择逻辑这种组合就选中了0x14地址。很多现成模组为了支持低功耗唤醒或手势识别会把INT脚默认上拉结果恰好导致启动地址不是经常写例程的那个人们熟知的0x28而是0x14。这次经历给我提了个醒只要是在现成模组上做驱动千万别只看参考例程里的固定地址最好先确认模块上INT和RESET的实际接法再根据上电时序反推地址否则很容易在第一步就被卡住。2. GT911双I2C地址的由来一颗引脚的采样时序2.1 地址由INT和RESET的上电状态决定GT911的地址选择并不是靠软件寄存器在运行后去改的而是靠芯片内部在上电复位期间对两个引脚状态的采样。简单说芯片内部有个锁存逻辑在RESET引脚从低到高的释放过程中或者VDD上电后的一个特定时间段内芯片会检测INT引脚的电平状态再加上RESET本身的状态组合出一个两位的配置值决定I2C地址。比较常见的组合是RESET释放后INT为低电平地址为0x287位地址RESET释放后INT为高电平地址为0x147位地址当然有些资料里还会提更细的配置比如通过外部电阻把地址拉到其他值但绝大多数模组只用了这两种默认组合。这里切记不同批次或不同封装版本可能略有差异最稳妥的办法还是直接用逻辑分析仪或者用I2C扫描程序去探测一遍而不是背地址。2.2 上电时序的几个关键时间参数GT911手册里要求VDD上电后RESET至少要拉低一段时间然后释放释放后要等INT引脚的电平稳定芯片才会完成地址锁存和内部复位。实际测量中我见过有的模组释放RESET后要等50毫秒左右才能访问也见过需要100毫秒以上的不同的电容充放电参数会导致时间差异。操作时我的个人习惯是拉低RESET至少10毫秒然后释放释放后延时至少100毫秒再开始I2C通信期间INT引脚保持固定的外部电平。这样基本能保证芯片完成初始化不至于出现时序太紧导致锁存不稳的情况。为什么不推荐只靠延时就不管引脚状态因为在产品批量生产时每块模组焊上之后引脚的机械接触、上拉电阻的精度都会有散布如果时序刚好卡在临界点就会随机出现一部分板子落在0x28一部分落在0x14的情况这会让产线非常痛苦。所以最好在硬件设计阶段就把INT、RESET的默认电平定死并确保上电顺序一致。2.3 7位地址和8位地址别搞混这个问题也常常坑人。I2C协议里的地址字节共8位最低位是读写标志位高7位才是真正的设备地址。很多芯片手册写“地址0xBA”其实是指包含读写标志的8位形式其中0xBA 0x5D 1。而很多驱动代码里设置地址时用的是7位形式也就是0x5D。GT911也是如此手册里可能会写“Slave Address 0xBA/0x28”这里的0x28是7位地址0xBA是写操作时的8位地址字节。如果你在代码里把0x28当成8位地址去用再左移一位变成0x50那就完全对不上了。用Linux内核设备树时reg属性一般写7位地址比如i2c1 { status okay; gt911: gt91128 { compatible goodix,gt911; reg 0x28; interrupt-parent gpio1; interrupts 14 IRQ_TYPE_EDGE_FALLING; reset-gpios gpio1 13 GPIO_ACTIVE_LOW; }; };这里的reg 0x28就是7位地址。如果驱动内部再按I2C核心的要求发地址字节那就自然会在总线上产生0x50/0x51这样的字节。如果你用的是裸机代码就要看清楚自己调用的I2C驱动API到底是接受7位地址还是8位地址否则很容易在地址换算上栽跟头。3. 双地址之外的寄存器读写细节比地址本身更值钱3.1 数据的读地址和寄存器地址要分开发GT911的I2C读操作和普通传感器不太一样。普通的I2C传感器比如温度芯片通常只需发送一个寄存器地址然后直接读字节即可。GT911则往往要求先写一个16位的寄存器地址而且这个寄存器地址是分两次发送的先发高字节再发低字节然后才发起读数据操作。我一开始参考某些例程时看到代码里连续写了两个字节的寄存器地址还觉得是不是写错了后来才明白这是GT911的固定要求。实际读取触摸坐标的流程大致是先向芯片写入0x814E高字节0x81低字节0x4E这是读取坐标数据缓冲区状态的寄存器地址再发起读操作读取若干个字节其中第一个字节是buffer status用来判断缓冲区是否准备好、是否有新数据确认数据有效后再读取0x8150开始的坐标数据区一次可以读多个触摸点坐标代码示意如下static uint8_t gt911_read_data(uint8_t dev_addr, uint16_t reg, uint8_t *buf, uint8_t len) { if (i2c_start(dev_addr 1 | 0) 0) return 0; if (i2c_write_byte((reg 8) 0xFF) 0) return 0; if (i2c_write_byte(reg 0xFF) 0) return 0; if (i2c_start(dev_addr 1 | 1) 0) return 0; for (uint8_t i 0; i len; i) { buf[i] i2c_read_byte(i (len - 1) ? 1 : 0); } i2c_stop(); return 1; }这样设计的好处是驱动代码可以统一用一个函数完成寄存器定位和后续数据读取坏处则是如果第一次发送寄存器地址后芯片没能正确识别读取结果就会是乱码或全是0xFF。调试时如果发现数据不对优先检查寄存器地址的字节顺序是高字节在前还是低字节在前这个问题比地址本身更容易忽略。3.2 坐标映射和buffer status的判断读取坐标数据时GT911支持最多5点触控每个触摸点的坐标和大小信息都以一定的字节布局放在寄存器里。常见的做法是先读0x814E取第一个字节的低2位判断是否有触点按下如果有再读出全部坐标数据按协议解析每个点的X坐标、Y坐标、ID和大小读取完成后建议向0x814E写入一个清除标志避免缓冲区一直保持数据未读状态这个清除标志的操作细节很重要但也容易出错。有些参考代码会在读取结束后写0x00到0x814E表示清除buffer状态有些则不需要。如果你发现触摸数据有时重复上报有时不报就要往回检查这一步。坐标数据和屏幕分辨率之间也有映射关系。GT911内部会用分辨率寄存器里的值来做归一化驱动初始化时需要把模组的实际分辨率和寄存器里的配置保持一致。如果配置的分辨率和屏幕实际尺寸不同触摸坐标就会偏比如点击屏幕右上角上报点却在中间区域。3.3 写初始化配置前先看checksumGT911有一个配置寄存器区比如0x8047到0x80FF里面保存了触摸灵敏度、扫描周期、开关控制等参数。上电后芯片会从内置的Flash加载配置但如果在运行期间你想改参数就得先把配置写入寄存器区并且要修改配置区的checksum否则芯片会认为配置无效。这个checksum的算法很简单对一定范围内的寄存器值求和然后取低字节写到指定校验位置。我以前第一次改触摸按键阈值时只改了数据没更新校验位结果芯片完全不响应新参数走了一遍弯路才明白是校验的问题。这里建议写配置前先读一遍原有配置做备份改动后把checksum重新算好再写不然很容易出现“改了但没生效”的奇怪问题。另外GT911还有软复位命令写在0x8040寄存器。配置写完后建议触发一次软复位让新配置真正加载到运行状态里。我实际测试中直接写寄存器配置而不触发软复位有大约一半概率不生效原因可能就是芯片内部没有正确加载新参数。4. 实际项目中验证双地址与避开冲突的完整思路4.1 第一步扫描总线上所有可用的地址在排查GT911这种芯片时最快的方法还是写一个简易的I2C地址扫描程序。裸机环境下可以枚举0x03到0x77范围内的所有7位地址逐个发送读请求看哪个地址有ACK回复。这样能快速摸清总线上到底挂了哪些设备也能确认GT911当前实际落在哪个地址上。如果扫描后发现0x28和0x14两个地址都没ACK那问题八成不在地址而在硬件连接或供电。如果只有一个地址有ACK就先按那个地址继续调试别管手册写的是哪个默认地址。这是最朴素的排错逻辑但确实能省不少时间。扫描时有一点要注意个别地址可能会被其他从设备占用比如板载EEPROM、别的传感器等扫描结果里会出现多个地址都有ACK。这时候可以结合原理图把已知设备的地址排除掉剩下的那个通常就是要找的设备。4.2 第二步用逻辑分析仪核对时序逻辑分析仪是我调试I2C最常用的工具。接上SCL和SDA上电抓一段波形马上就能看到开始条件、地址字节、ACK位置。如果地址字节是0xBA8位写地址说明芯片用的是0x5D这个7位地址如果地址字节是0x288位写地址那7位地址就是0x14。这可以直接验证你的猜测。抓波形时记得把采样率设置得高一点比如400k的I2C速率采样率至少2M以上不然波形边沿不够清晰容易误判。逻辑分析仪软件一般都有I2C协议解析能直接标出地址、读写位、数据非常直观。曾经遇到过一种情况逻辑分析仪上能看到设备在应答但MCU那边却一直报超时后来发现是MCU的I2C外设配置的主设备地址过滤不对或者GPIO开漏模式没配好。这类问题跟GT911本身无关但排查时也会被误导到芯片地址上建议先把逻辑分析仪作为第一证据来源再回来看MCU侧配置。4.3 第三步处理总线地址冲突GT911支持两个I2C地址除了方便模组厂商在不同硬件设计里选择默认地址还有一个实际意义是避免和总线上同一地址的其他设备冲突。比如I2C总线上可能挂了一颗温度传感器地址恰好是0x28如果GT911也固定在0x28那就没法同时用了。而GT911可以通过引脚配置改成0x14这样两颗设备就能共存。如果你的电路设计里正好遇到这种情况建议在硬件上主动把GT911的INT引脚状态设计成与另一个设备地址错开。比如温度传感器已经占了0x28那就让GT911上电时INT为高让它落在0x14。这样驱动代码里只需固定使用0x14即可不需要在运行时切换。软件层面还有一种思路就是驱动初始化时可以有两个地址的探测逻辑。先尝试0x28读设备ID失败后再尝试0x14。但这个方案有点粗糙如果芯片正在复位时序里还没准备好两次都会探测失败。更好的做法是驱动里通过GPIO控制RESET时序确保在探测前芯片已经完成地址锁存。4.4 第四步固化上电时序避免产线随机性前文我提到某块模组的INT引脚默认被上拉到高所以地址落在0x14。但如果你自己设计底板既可以做成固定下拉让地址稳定在0x28也可以做成固定上拉让地址稳定在0x14关键是整个项目里只能有一个确定的预期。我个人更推荐在原理图阶段就明确写入设计文档标注“GT911 使用I2C地址0x28”并且把INT引脚通过10k电阻下拉到GNDRESET接MCU GPIO控制。这样上电时INT必然为低地址必然是0x28驱动代码里也能写死不依赖运行时探测。在上电时序的代码实现方面我常用的初始化序列是配置RESET和INT引脚为GPIO输出拉低RESET延时20毫秒配置INT引脚为输入或保持外部电平状态释放RESET延时100毫秒开始I2C通信读取设备ID验证这段代码不复杂关键是时序别省。有些工程为了启动快释放RESET后只延时10毫秒就去读ID结果经常失败。多加几十毫秒延时换取的是启动可靠性对触摸屏这种设备来说完全值得。5. 从GT911延伸到类似触摸IC的通用经验5.1 同系列芯片的地址配置差异GT911只是该系列里比较常见的一颗同系列还有支持更大尺寸屏幕或更多触点的型号它们在I2C地址设计上存在相似之处。比如有的芯片同样使用INT引脚选择地址有的则通过AUX引脚或I2C地址配置引脚来选择。这些引脚在上电复位时被采样运行期间不再变化。做项目管理时最好建立一个寄存器配置表和硬件引脚状态表的映射把每颗触摸芯片的地址选择条件、默认地址、最大触点数、坐标数据格式都整理清楚。这样换料、换屏幕时驱动移植时间能大幅压缩。比如某项目原本用的芯片A换成同系列的芯片B屏尺寸变了触摸点数也变了但寄存器处理流程基本一致只需改分辨率和读取长度。如果地址选择逻辑也是一致的那么驱动代码几乎不动只改配置数组即可。5.2 模块定制时如何利用双地址如果你想自己做一块带触摸屏的模块甚至可以主动利用GT911的双地址特性做一版驱动兼容方案。比如模块上提供一个0欧电阻位焊上后INT被拉高地址为0x14不焊时INT被拉低地址为0x28。这样同一块PCB可以适配两种主控环境只是需要提前和软件约定默认使用哪个地址。这种设计在开发阶段很实用。比如评估板上INT默认上拉你在代码里先用0x14调试等软件稳定后又希望和另一套已有驱动只支持0x28的平台兼容那就通过割电阻改为地址0x28硬件不用重新打样。多一个电阻位换来的是驱动兼容上的灵活性。我还在某个项目里见过一个比较巧妙的做法通过一个跳线帽同时控制INT和RESET的上电时序让同一块模组既能工作在单机模式又能工作在总线复用模式靠的就是这个地址选择特性。当然这种方案需要非常清楚I2C总线上所有设备的地址规划否则容易造成冲突。5.3 个人经验小结调试GT911这类芯片我的感受是单纯背地址、背寄存器清单不如先会正确推理地址的来源和寄存器访问模型。I2C地址不是一成不变的它是芯片上电状态的一个结果。遇到设备没应答第一步不是怀疑芯片坏了而是检查引脚状态和上电时序第二步才是扫描总线地址。因为我吃过这个亏现在做任何带I2C接口的模组第一件事都是看原理图上有没有地址配置引脚然后把它对应到驱动代码里的地址宏。触摸屏驱动里面芯片初始化能不能通往往决定了后面所有工作能不能展开。把这个隐藏的小知识点记牢能少走很多弯路。5.4 再补充一点关于调试工具的体会最后说说调试工具的选择。I2C地址问题最直观的验证工具就是逻辑分析仪其次是带I2C扫描功能的MCU调试小板。纯靠示波器看波形也可以但协议解析效率低而且容易漏掉ACK的细节。如果手头有树莓派、STM32这类开发板可以先写一个I2C扫描程序单独验证GT911地址再决定是改硬件还是改软件。这种方法尤其适合只用现成模组、没有原理图详细资料的场景。因为在没有完整文档的情况下实际探测永远比查资料更可靠。

相关新闻

MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

/* 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 1:04:48 阅读更多 →
Java实现图片与Base64互转及保存的完整指南

Java实现图片与Base64互转及保存的完整指南

/* 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 1:04:48 阅读更多 →
STM32寄存器操作实战:从点灯到定时器与串口,彻底搞懂底层开发

STM32寄存器操作实战:从点灯到定时器与串口,彻底搞懂底层开发

/* 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 1:04:48 阅读更多 →

最新新闻

论文查重降重红黑榜:这几类工具纯属浪费时间

论文查重降重红黑榜:这几类工具纯属浪费时间

每年三四月,论文查重降重就成了毕业生绕不开的关卡。有人花几百块买教训,有人熬几个通宵手动改红字,还有人查重结果和学校终检差了十万八千里。这篇红黑榜不吹不黑,把常见的坑和值得用的工具一次说清楚,看完能帮你省下…

2026/10/13 1:56:16 阅读更多 →
视频卡顿排查全链路:从编码参数到高通硬解的分层定位实战

视频卡顿排查全链路:从编码参数到高通硬解的分层定位实战

/* 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 1:56:16 阅读更多 →
魔方机器人还原算法全解析:从状态建模到IDA*搜索实战

魔方机器人还原算法全解析:从状态建模到IDA*搜索实战

1. 从一堆色块到一串指令:魔方还原算法到底在算什么很多人第一次听到“魔方机器人”,脑子里浮现的画面是机械臂咔咔转动、几秒复原一个打乱的魔方。但真正动过手的人都知道,机械结构只是骨架,真正决定这个机器人聪不聪明的&#x…

2026/10/13 1:56:16 阅读更多 →
Qt编译QMYSQL驱动全攻略:彻底解决Driver not loaded报错

Qt编译QMYSQL驱动全攻略:彻底解决Driver not loaded报错

如果你在 Qt 里用QSqlDatabase::addDatabase("QMYSQL")连接 MySQL,大概率见过这个刺眼的报错:QSqlDatabase: QMYSQL driver not loaded。我第一次碰到时还以为是 Qt 安装坏了,重装两遍之后才发现,官方安装包压根不保证给…

2026/10/13 1:56:16 阅读更多 →
GC是什么,为什么要有GC?从面试题到内存管理本质彻底讲透

GC是什么,为什么要有GC?从面试题到内存管理本质彻底讲透

/* 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 1:56:16 阅读更多 →
基于机器学习A股走势预测系统源码:从数据到回测的完整实战

基于机器学习A股走势预测系统源码:从数据到回测的完整实战

简介:这份资源面向金融量化初学者与具备一定Python基础的开发者,提供一套基于机器学习预测A股走势的完整源码方案,帮助读者理解从数据获取到模型回测的全流程。压缩包共12个文件,约2.53MB,包含6个ipynb交互式笔记、3个…

2026/10/13 1:55:16 阅读更多 →

日新闻

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

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

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

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/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

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