GD32 TIMER0 PWM无波形?高级定时器MOE主输出使能是关键
我先交代下背景。前阵子有个读者在群里发了一段代码说GD32的TIMER0输出PWM配置流程跟教程一模一样示波器接在PA8上死活看不到波形。群里七嘴八舌有人说时钟没使能有人说复用功能不对还有人说是不是芯片坏了。最后问题出在哪儿一行隐藏配置高级定时器的主输出使能位MOE没打开。这不是个例。GD32的TIMER0对应STM32的TIM1属于高级定时器它和普通定时器的PWM输出逻辑有一个非常大的区别所有PWM通道的信号要真正推到引脚上必须先把一个叫“主输出使能”的总开关打开。很多从STM32F1老库迁移过来的朋友或者直接照着GD32普通定时器例程改的新手都会在这一步栽跟头。这篇文章我会把这层纸彻底捅破从现象定位、原理分析、完整代码到常见问题一次讲清楚。文中代码我按GD32F103标准外设库风格写也附了寄存器级操作适合裸机开发也方便你移植到RT-Thread或其他框架里。1. 问题现象与快速定位1.1 你遇到的十有八九是这几种现象先说现象方便大家对号入座。用GD32 TIMER0做PWM输出最常见的是下面这四种表现程序烧进去以后引脚上电平完全没变化接示波器是一条平直的线高电平或低电平都有可能。引脚上有微弱波形但幅度不对看起来像被什么东西拉住了跟死区电压似的。代码逻辑上确认配置了PWM寄存器读出来也“看起来正常”但就是没有波形输出。上电瞬间有一小段波形随后就消失或者反过来程序跑起来很久才突然有输出。第一类和第二类往往指向同一个核心原因MOE没置位、GPIO复用模式不对、或者时钟没有真正打开。第三类最迷惑人因为寄存器的值会骗人下面重点讲。第四类则多半和初始化顺序、输出空闲状态配置有关系。1.2 排查前先确认波形到底去了哪在动寄存器之前先用一个笨办法锁定问题位置。把初始化代码里的PWM相关配置全部注释掉只留GPIO初始化然后在主循环里对目标引脚做一次普通推挽输出翻转也就是写一个简单的GPIO翻转程序看看引脚上有没有波形。如果翻转程序能出波形说明GPIO和时钟链路没问题问题出在定时器配置。如果翻转程序都出不了波形先查GPIO时钟、复用映射、示波器表笔再回来搞定时器。这一步能筛掉一大半的低级问题。很多人在PA8上查了半天最后发现器件引脚定义里这个引脚的默认复用根本不是TIMER0_CH0必须先在AFIO里打开重映射波形才能从正确的位置出来。引脚波形确认正常以后再回来读TIMER0的寄存器。用调试器看下面几个值TIMER_CTLR0 里的 CEN 位是不是 1。CCER 里 CC0E 位是不是 1。CH0CV 也就是 CCR0有没有一个非零的比较值。这几个值全部正常却依然没有波形输出那么恭喜你已经站在了最经典的那个坑边缘BDTR寄存器里的MOE位。2. 真正的元凶TIMER0主输出使能位MOE2.1 为什么普通定时器不用TIMER0偏偏要这个要理解MOE先得明白GD32定时器家族的分工。GD32F103里的TIMER0是高级定时器对标STM32的TIM1它的定位是电机控制、数字电源这类对安全性要求极高的场景。这些场景里经常要用到刹车输入Break Input、互补输出、死区插入、紧急关断这些功能。万一电机控制程序跑飞了硬件上必须有一个机制能瞬间切断PWM输出让电机关断。为了实现这个“硬件级安全开关”芯片设计者在高级定时器的输出通路上加了一道总闸门就是MOE。MOE置1各个通道的比较输出才能送达到引脚MOE清0所有通道强制进入配置好的空闲状态引脚保持安全电平。这个设计思路其实特别像家里装修时的总配电箱。房间里的开关面板装得再漂亮空气开关没合上灯是不会亮的。普通定时器相当于每个房间单独拉拉线没有总闸高级定时器就是所有线路都经过总配电箱必须合闸才供电。所以TIMER0的PWM配置比普通定时器多两步一是单独使能主输出二是要把空闲状态、极性这些参数配置好否则即使MOE置位了输出电平也可能不符合预期。2.2 GD32库函数里那一行不起眼的代码在GD32标准外设库Firmware Library里使能MOE的接口长这样timer_primary_output_config(TIMER0, ENABLE);函数的字面意思是“主输出配置”。很多人看到“primary”这个词以为跟通道主从模式或者主输出触发有关直接就跳过了。其实它的作用就是置位BDTR寄存器里的MOE位。如果你用的是寄存器操作对应这一行TIMER_BDTR(TIMER0) | TIMER_BDTR_MOE;不同型号的固件库里这个宏名字可能有细微差别有的叫 TIMER_BDUTLR但位定义本质上是同一个。配置PWM时这行代码必须放在 timer_enable 之前逻辑上放在所有通道输出配置完成之后、开定时器之前是最稳妥的顺序。这里特别提醒一下有些旧版本的例程里这行代码被封装在“刹车和死区寄存器配置”函数里看起来跟PWM毫无关系这也是很多教程抄了一半导致漏配的原因。3. 从零配置的完整流程与参考代码下面给出一份完整的GD32F103 TIMER0输出PWM代码通道用CH0引脚PA8PWM频率1kHz占空比可调。这套流程同样适用于CH0-CH3以及对应的互补通道。3.1 时钟使能与GPIO复用配置GD32F103的TIMER0挂在APB2总线上所以第一步是打开APB2上的定时器时钟同时打开GPIOA时钟。#include gd32f10x.h #define PWM_FREQ_HZ 1000u #define PWM_PERIOD 999u #define PWM_PRESCALER 107u #define PWM_DUTY_50 500u void pwm_timer0_gpio_init(void) { /* 使能TIMER0时钟注意这里是RCU_TIMER0不是RCU_TIMER1 */ rcu_periph_clock_enable(RCU_TIMER0); rcu_periph_clock_enable(RCU_GPIOA); /* PA8复用为TIMER0_CH0GD32F10x系列默认复用功能编号为AF1 */ gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_8); gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8); gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8); }这里有个非常容易出错的地方GD32的GPIO复用函数和STM32不完全一样。STM32F1老库通常用 GPIO_PinRemapConfig 做重映射然后用 GPIO_Mode_AF_PP 配置引脚模式而GD32标准外设库分成了 gpio_af_set 和 gpio_mode_set 两步AF编号也要查芯片手册确认。PA8的TIMER0_CH0默认就是AF1但如果你要映射到其他引脚AF编号很可能不一样。我见过有人直接把STM32的代码搬过来把 GPIO_Mode_AF_PP 改成 GD32 对应写法时漏掉了 gpio_af_set导致引脚始终处于普通GPIO状态定时器输出当然到不了引脚。3.2 定时器时基与PWM输出通道配置接下来配置时基结构体这里是决定PWM频率和占空比精度的关键。我以系统主频108MHzAPB2定时器时钟等于主频为例。预分频值107得到1MHz的计数时钟自动重载值999向上计数到999后归零所以PWM频率是108MHz / (1071) / (9991) 1kHz。void pwm_timer0_init(void) { timer_parameter_struct timer_initpara; timer_oc_parameter_struct timer_ocinitpara; pwm_timer0_gpio_init(); /* 复位TIMER0保证寄存器处于默认状态 */ timer_deinit(TIMER0); /* 时基配置 */ timer_initpara.prescaler PWM_PRESCALER; timer_initpara.period PWM_PERIOD; timer_initpara.alignedmode TIMER_COUNTER_EDGE; timer_initpara.counterdirection TIMER_COUNTER_UP; timer_initpara.clockdivision TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter 0; timer_init(TIMER0, timer_initpara); /* 输出通道配置 */ timer_ocinitpara.outputstate TIMER_CCX_ENABLE; /* 主通道CH0输出 */ timer_ocinitpara.outputnstate TIMER_CCXN_DISABLE; /* 互补通道CH0N关闭 */ timer_ocinitpara.ocpolarity TIMER_OC_POLARITY_HIGH; timer_ocinitpara.ocnpolarity TIMER_OCN_POLARITY_HIGH; timer_ocinitpara.ocidlestate TIMER_OC_IDLE_STATE_LOW; timer_ocinitpara.ocnidlestate TIMER_OCN_IDLE_STATE_LOW; timer_channel_output_config(TIMER0, CHANNEL_0, timer_ocinitpara); /* PWM模式与占空比 */ timer_channel_output_mode_config(TIMER0, CHANNEL_0, TIMER_OC_MODE_PWM0); timer_channel_output_pulse_value_config(TIMER0, CHANNEL_0, PWM_DUTY_50); }补充一个占空比的计算细节PWM0模式下当计数器的值小于比较值时输出有效电平也就是高电平。所以比较值500周期是999高电平时间是500个计数周期占空比就是500 / 1000 50%。如果你把输出模式改成 TIMER_OC_MODE_PWM1电平逻辑会反过来。很多人在调占空比时发现波形完全反了或者初始状态不对基本就是这里选错了模式。3.3 关键的一步主输出使能这部分内容就是文章标题里说的“关键配置”。在 timer_enable 之前必须让相位总闸门合上。/* 关键配置使能TIMER0主输出对应BDTR寄存器MOE位 */ timer_primary_output_config(TIMER0, ENABLE); /* 使能自动重装载影子寄存器修改period后立即生效 */ timer_auto_reload_shadow_enable(TIMER0); /* 启动定时器 */ timer_enable(TIMER0); }timer_primary_output_config 调用之后BDTR寄存器的MOE位会被置1这时高级定时器才允许把比较单元产生的PWM信号真正送到GPIO引脚。由于GD32的库函数设计得比较隐蔽这行代码经常被当成“可选配置”忽略。实际上它是整个流程里不可或缺的一环。顺序问题也值得强调MOE使能必须在定时器计数开始之前完成。如果先执行 timer_enable然后再置位MOE理论上前几个PWM周期可能没有输出在一些对时序敏感的场合会造成开机瞬间的一小段电平异常。虽然多数场景下肉眼观察不到但从可靠性的角度我还是建议按“通道配置 → MOE使能 → 自动重载 → 定时器使能”这个顺序来。3.4 寄存器级操作对照如果你习惯直接操作寄存器或者想把这段逻辑压缩到极小代码里下面这段等效。/* 打开时钟 */ RCC_APB2ENR | RCC_APB2ENR_TIMER0EN; RCC_APB2ENR | RCC_APB2ENR_AFEN; RCC_APB2ENR | RCC_APB2ENR_IOPAEN; /* PA8配置为复用推挽需要根据器件手册配置AFIO */ GPIOA_CFGHR ~(0xFu ((8 % 8) * 4)); GPIOA_CFGHR | (0xBu ((8 % 8) * 4)); /* AFIO模式 */ GPIOA_AFRL | (0x1u ((8 % 8) * 4)); /* 复用为TIMER0_CH0 */ /* TIMER0时基配置 */ TIMER_CTLR0(TIMER0) ~TIMER_CTLR0_CEN; TIMER_PSC(TIMER0) PWM_PRESCALER; TIMER_CAR(TIMER0) PWM_PERIOD; TIMER_CH0CV(TIMER0) PWM_DUTY_50; /* 输出通道配置 */ TIMER_CTLR0(TIMER0) | TIMER_CTLR0_CAM; TIMER_CCER(TIMER0) | TIMER_CCER_CC0E; /* 关键配置MOE主输出使能 */ TIMER_BDTR(TIMER0) | TIMER_BDTR_MOE; /* 启动定时器 */ TIMER_CTLR0(TIMER0) | TIMER_CTLR0_CEN;寄存器版本里各位含义非常直白重点还是那行 TIMER_BDTR | MOE。调试时如果你用寄存器版本读寄存器确认直接在调试器的寄存器窗口搜索 BDTR 就能看到 bit15 是不是1。4. 移植与开发环境适配问题4.1 GD32标准外设库的坑函数名和STM32不一致用GD32做开发很多人第一个念头是“既然号称兼容STM32直接拿STM32代码改吧”。大方向没错但GD32的标准外设库函数命名有自己的体系直接复制ST的HAL库代码基本不能用。比如STM32 HAL里的 __HAL_TIM_MOE_ENABLE 在GD32库里的对应物就是 timer_primary_output_config。这还算好找麻烦的是GD32库的时基结构体、通道配置函数和STM32 HAL差异比较大照着HAL例程改经常出现结构体字段对不上。我个人的经验是GD32项目最好从官方标准外设库的模板工程起步。在GD32官方GitHub仓库里每个系列都有配套的Template工程里面有完整的时钟初始化、外设驱动、链接脚本。基于模板改代码比从STM32工程强行迁移省一半时间。4.2 GD32 Embedded Builder、Keil和Linux三条开发路线GD32 Embedded Builder是GigaDevice官方推出的免费IDE基于Eclipse框架内置AC6工具链支持下载调试对初学者最省心。新建工程时选择芯片型号模板自带启动文件和标准外设库不需要自己折腾环境。如果习惯用Keil需要到Keil官网或GigaDevice官网下载对应的Device Family Pack然后在Keil里选择GD32F103C8T6这类具体型号。这里容易出现的问题是没有安装DFP导致芯片列表里找不到GD32编译报一堆头文件找不到。装好DFP以后编译烧录手感和STM32基本一致。Linux下编译GD32项目一般用CMake加arm-none-eabi-gcc工具链工程里指定芯片启动文件、链接脚本和标准外设库源码。调试可以用OpenOCD支持的调试器包括GD-Link、DAPLink。相比IDE方案Linux命令行方式前期配置成本高一些但便于脚本化构建和CI集成。只要启动文件和RCC配置正确同一套PWM代码在三种环境下的行为是一致的。4.3 ST-Link连接GD32的特殊情况热词里提到的“gd32连接stlink报internal command error”我也碰到过。ST-Link理论上基于SWD协议与GD32的SWD接口兼容但实际连接时偶尔会报这个错误。排查思路分两步先确认硬件连接SWDIO、SWCLK、GND三根线必须牢靠目标板要独立供电不要指望调试器供电带起整个系统再确认复位电路GD32的NRST引脚如果有外部电容过大会影响调试器握手必要时可以手动复位一下再尝试连接。如果ST-Link始终连不上我建议直接换DAPLink或者GD-Link这两类调试器对GD32的适配做得更到位识别成功率高得多。很多时候不是芯片问题而是调试器固件和芯片初始化时序不太对付。5. 常见问题与排查技巧实录5.1 常见问题速查表下面这张表汇总了我做GD32 TIMER0 PWM以来遇到的典型问题、原因以及解决办法建议收藏备查。现象可能原因解决办法引脚完全没波形寄存器CEN/CC0E/CH0CV都正常MOE未置位调用 timer_primary_output_config(TIMER0, ENABLE)引脚有波形但占空比和设置值反了PWM0/PWM1模式选错切换 TIMER_OC_MODE_PWM0 和 TIMER_OC_MODE_PWM1波形出现在错误引脚PA8没反应复用功能编号或重映射配置错误核对AF编号必要时打开GPIO重映射引脚有微弱电平波形像被拉住了GPIO模式不是复用推挽检查 gpio_mode_set 和 gpio_output_options_set 配置上电一段时间后波形才出现MOE使能顺序晚于定时器启动调整初始化顺序MOE先于 timer_enable修改占空比后波形不更新自动重载影子寄存器未使能调用 timer_auto_reload_shadow_enable用ST-Link连接时报internal command error调试器握手问题检查接线和供电或换DAPLink/GD-Link这张表看着简单每一条背后都有具体案例支撑。特别是第一条我开发时用调试器读寄存器CEN是1CC0E是1CH0CV是500所有字段“应该”正常唯独BDTR的MOE是0波形就是出不来。5.2 几个我亲自踩过的实操细节细节一示波器要用直流耦合先看静态电平。排查PWM问题时示波器档位很影响判断。用交流耦合会把直流分量滤掉看起来像有波形但实际上可能只是噪声。我的习惯是先把时基调大看一整段高电平平台是否存在再用单次触发抓上升沿。细节二检查引脚阻抗和表笔接触。这类问题最容易被忽视。PA8如果被接成开漏模式或者需要外接上拉电阻波形可能只会下拉不会主动上拉。GPIO输出模式里推挽输出和开漏输出的区别在实际调试中一眼就能看出来。细节三寄存器窗口查BDTR。在Keil里直接打开System Viewer找到TIMER0外设点开BDTR寄存器检查bit15 MOE是否为1。这个方法比打断点去内存窗口翻HEX值直观得多。如果你用的是GD32 Embedded Builder调试透视图里同样有寄存器查看器。细节四重复初始化导致配置被覆盖。有些例程里GPIO初始化代码写了两遍第一次配置成TIMER0复用第二次因为流程没走完又把引脚配回普通GPIO。这个问题很隐蔽单纯看PWM初始化代码是完全正常的。细节五备份芯片在烧录后进入保护状态。GD32的选项字节里如果设置了读保护调试器连接后无法读取寄存器看起来就像“芯片没反应”。用J-Link或GD-Link全片擦除后重新烧录问题往往就消失了。这个不算PWM配置问题但很容易干扰排查值得留意。5.3 我推荐的排查顺序如果你现在正好被这个问题卡住按照下面的顺序来排查大概率能在五分钟内锁定根因第一步确认引脚翻转正常排除GPIO和示波器问题。第二步读TIMER0的CEN、CC0E、CH0CV确认定时器本身已经跑起来。第三步读BDTR寄存器看MOE是否为1。如果是0直接补上 timer_primary_output_config。第四步确认GPIO的复用功能编号和AFIO重映射是否匹配目标引脚。第五步如果以上全正常把PWM模式切成PWM1试试排除极性问题。这套顺序也适用于高频PWM、多通道PWM以及带死区互补输出的场景。不管你是用GD32F103还是GD32F407高级定时器的这一“总闸”逻辑是一致的。写在最后我个人在实际操作中最大的体会是GD32的高级定时器功能确实强大但代价是配置链路上多了好几道“闸门”。MOE只是其中最容易漏的一道后面还有死区、刹车、空闲状态这些更隐蔽的配置。做这类外设初始化时最好的习惯是边配置边用调试器读寄存器确认每一步都真实生效了而不是等整套代码写完再去量波形。最后再分享一个小技巧每次新建PWM工程我都在初始化函数最后加一个断言函数检查 TIMER_BDTR(TIMER0) 的MOE位是否置位。如果某次改代码改了初始化顺序这个断言会在开发阶段就把问题兜住而不是等波形出不来才回头查。这个方法成本极低却能让PWM调试的返工次数明显减少。

相关新闻

网络安全技术落地实践:从加密算法选型到防火墙部署的避坑指南

网络安全技术落地实践:从加密算法选型到防火墙部署的避坑指南

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

2026/10/5 15:00:35 阅读更多 →
软考系统架构设计师复习笔记:从操作系统到数据库的考点精讲

软考系统架构设计师复习笔记:从操作系统到数据库的考点精讲

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

2026/10/5 15:00:35 阅读更多 →
硬件工程师如何通过拆解优秀产品快速提升设计能力

硬件工程师如何通过拆解优秀产品快速提升设计能力

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

2026/10/5 15:00:35 阅读更多 →

最新新闻

数据库日志清理与复制槽删除:从原理到实战的完整指南

数据库日志清理与复制槽删除:从原理到实战的完整指南

1. 为什么"日志清理"会跟"复制槽删除"绑在一起 先聊一个很多DBA第一次听到会愣住的问题:数据库压力大的时候,日志盘报警了,你跑去看,发现归档日志、WAL日志堆积如山,然后同事跟你说"把复制槽…

2026/10/5 15:42:14 阅读更多 →
ESLint 与 Prettier 前端工程化实战:从扁平配置到提交钩子

ESLint 与 Prettier 前端工程化实战:从扁平配置到提交钩子

我记得很清楚,第一次在团队里引入代码规范时遭遇的场景:一个老哥修了一下午的 bug,推完代码腼腆地说“帮我看看这个文件”,我打开 Pull Request 一看——单引号、双引号混用,分号一会儿有一会儿没有,缩进两…

2026/10/5 15:42:14 阅读更多 →
MySQL InnoDB锁机制深入解析:从行锁、间隙锁到死锁排查实践

MySQL InnoDB锁机制深入解析:从行锁、间隙锁到死锁排查实践

1. 面试官为什么揪着InnoDB的锁不放聊到MySQL技术面,十个面试官里有八个会问锁机制。这不是面试官闲得慌,而是锁机制直接决定了你对InnoDB到底理解多深——它是并发控制的地基,也是线上死锁、锁等待、慢SQL等一系列故障的源头。说白了&#x…

2026/10/5 15:42:14 阅读更多 →
基于Python的电信资费管理系统设计与实现

基于Python的电信资费管理系统设计与实现

1. 毕设选它之前,先想清楚这三件事每年到了计算机毕业设计选题季,我都能在后台收到一堆类似的私信:“学长,Python的XX管理系统能不能做?”“这套电信资费管理系统难不难?”“前后端分离的毕设要准备哪些东西…

2026/10/5 15:42:14 阅读更多 →
广域网协议课件:从PSTN到PPP PAP验证的完整教学包

广域网协议课件:从PSTN到PPP PAP验证的完整教学包

简介:这份PPT课件面向计算机网络课程学习者与备考人员,系统讲解广域网技术及协议的核心知识,帮助读者理解局域网之外的长距离数据通信原理与典型实现方案。压缩包内仅含1个PPT文件,体积约1.12MB,以图文并茂的幻灯片形式…

2026/10/5 15:42:14 阅读更多 →
HarmonyOS 7 QuickDock 闪控窗开发实录 03:floatView × ArkData:自由拖动、侧边暂存与位置持久化【鸿蒙心迹】

HarmonyOS 7 QuickDock 闪控窗开发实录 03:floatView × ArkData:自由拖动、侧边暂存与位置持久化【鸿蒙心迹】

前两篇把 QuickDock 的两条基础链路稳定下来:标准闪控窗可以作为任务展示层独立存在,闪控窗和闪控球之间切换时,业务任务始终只有一份状态。 做到这里以后,第三篇才适合处理“拖动”。 因为真正做自由拖动时,问题绝不是…

2026/10/5 15:41:14 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →