RDA5807M FM模块寄存器级驱动与硬件时序详解
简介本资源是一套基于51单片机驱动RDA5807M FM收音模块的完整嵌入式开发实践方案面向电子类专业学生、单片机初学者及硬件爱好者解决I²C通信驱动、FM调谐与自动搜台功能实现、LCD1602人机交互显示等典型嵌入式开发问题。压缩包共41个文件涵盖6个核心C源码含main.c、IIC.c、LCD1602.c及厂家驱动RDA_FM5807P_drv_V3.3.c、5个头文件、2份PDF技术文档数据手册与编程指南、1份Excel寄存器说明、1份Word规格书及大量编译中间文件obj/lst和工程配置文件uvproj/uvopt整体1.7MB结构完整便于理解编译流程与模块化设计逻辑。已有3729人学习下载读者可直接获取可运行的TUNE手动调频与SEEK自动搜台双模式代码、配套全中文技术资料、寄存器级配置说明及LCD1602实时显示频率/RSSI/音量的完整软硬件协同实现方案。1. RDA5807M FM模块不是“插上就响”的玩具而是需要时序握手、寄存器精调的嵌入式音频子系统你手里的那个标着“RDA5807M.rar”的压缩包大概率是某开发者从二手电子市场淘来的FM收音模块套件附带的资料包——里面可能有PDF数据手册、Arduino示例代码、Keil工程甚至还有几行注释潦草的I2C初始化片段。但别急着烧录。RDA5807M不是USB声卡它没有即插即用的固件层它是一颗典型的I2C接口单芯片FM接收SoC内部集成LNA、混频器、中频滤波、立体声解码、音量控制和耳机驱动但所有功能都得靠你一帧一帧地写寄存器来激活。很多新手第一次通电后听不到声音不是模块坏了而是没完成“静音解除→频点预设→搜索使能→立体声强制同步”这四步不可跳过的状态机流转。它适合需要低功耗、小体积、自主可控FM功能的嵌入式项目比如便携式气象播报终端、车载信息屏的副音频通道、或教育类无线电原理实验平台——但前提是你愿意花两小时啃完那68页英文数据手册里关于0x02/0x03/0x04寄存器的时序约束和掩码定义。2. 从硬件连接到寄存器映射RDA5807M最小可运行系统的三阶搭建法2.1 硬件层I2C总线不是“接对线就行”VIO与VCC必须物理隔离RDA5807M的供电引脚有明确分工VCC2.7–5.5V为模拟射频部分供电VIO1.6–3.6V专供数字I2C接口逻辑电平。若你的MCU是3.3V系统绝不能将VCC和VIO共接3.3V——这会导致内部LNA偏置异常表现为灵敏度骤降10dB恶化或本振泄露干扰。正确做法是VCC接稳压LDO输出推荐3.0V±2%VIO经电平转换芯片如TXS0102或电阻分压网络仅限短距离、低速场景接MCU的3.3V GPIO。I2C的SCL/SDA线需各加4.7kΩ上拉电阻至VIO电源而非VCC。GND必须单点接地避免数字噪声串入射频地平面。实测中某开发者因直接将VIO与VCC短接至同一3.3V LDO导致模块在87.5MHz处信噪比仅28dB更换独立VIO供电后升至49dB。# 硬件连接核查清单以STM32F103C8T6为例 # ┌──────────────┬─────────────────────────────────────┐ # │ RDA5807M Pin │ STM32F103C8T6 Pin / 备注 │ # ├──────────────┼─────────────────────────────────────┤ # │ VCC │ PA1 (3.0V LDO OUT) —— 禁止接PA2(3.3V) │ # │ VIO │ PB6 (I2C1_SCL) 4.7kΩ上拉至3.3V │ # │ SCL │ PB6 (I2C1_SCL) │ # │ SDA │ PB7 (I2C1_SDA) 4.7kΩ上拉至3.3V │ # │ GND │ 共地且远离电机/DC-DC模块布线 │ # │ RSTB │ 悬空内部上拉或接MCU GPIO高电平复位│ # │ INT │ 可悬空轮询模式或接PB0中断触发 │ # └──────────────┴─────────────────────────────────────┘提示INT引脚在RDA5807M中默认为开漏输出若启用中断模式必须在MCU端配置为上拉输入并在初始化后写0x02寄存器bit71使能中断。未使能时读取该引脚恒为高易误判为“无信号”。2.2 驱动层避开Arduino库的“黑匣子”手写I2C寄存器操作四步法市面上多数Arduino库如RDA5807M.h封装了高级API但隐藏了关键时序细节。例如radio.setFrequency(101.1)内部会执行①计算频率字101.1MHz → 0x277E②写0x02寄存器频点低12位③写0x03寄存器频点高4位搜索控制位④延时等待锁相环稳定。而第④步的延时值在数据手册Table 12中明确定义为至少100ms但某些库只给10ms导致频繁失锁。我们采用裸寄存器操作确保每一步可控// STM32 HAL库手写I2C写寄存器函数关键带错误重试与超时 HAL_StatusTypeDef RDA5807M_WriteReg(uint8_t reg_addr, uint16_t value) { uint8_t tx_buf[3]; tx_buf[0] reg_addr; // 寄存器地址0x00~0x0A tx_buf[1] (value 8) 0xFF; // 高8位RDA5807M为16位寄存器I2C写入2字节 tx_buf[2] value 0xFF; // 低8位 HAL_StatusTypeDef ret; uint32_t timeout 0; do { ret HAL_I2C_Master_Transmit(hi2c1, 0x111, tx_buf, 3, 100); // 0x11为RDA5807M固定I2C地址 timeout; } while ((ret ! HAL_OK) (timeout 5)); // 最多重试5次 return ret; } // 初始化序列按数据手册Section 6.2严格执行 void RDA5807M_Init(void) { // Step 1: 软复位写0x00寄存器bit151 RDA5807M_WriteReg(0x00, 0x8000); HAL_Delay(1); // 等待复位完成 // Step 2: 使能晶振0x00寄存器bit141、关闭静音bit100、设置立体声bit91 RDA5807M_WriteReg(0x00, 0x4200); // 0x4200 0100 0010 0000 0000 // Step 3: 设置音量0x04寄存器bit0~bit30x00最大0x0F静音 RDA5807M_WriteReg(0x04, 0x05); // 音量设为中等0x05对应约-12dB // Step 4: 写入目标频点以101.1MHz为例(101.1*10^6)/10^4 10110 → 0x277E RDA5807M_WriteReg(0x02, 0x277E); HAL_Delay(100); // 强制等待PLL锁定不可省略 }逻辑说明0x00寄存器是主控寄存器bit15软复位、bit14使能32.768kHz晶振必须开启否则本振不稳、bit10静音控制0解除静音、bit9立体声模式1强制立体声0自动切换。0x02和0x03共同构成16位频率字计算公式为Freq_KHz (REG_VALUE × 10) 87500单位KHz因此101.1MHz 101100KHz →REG_VALUE (101100 - 87500) / 10 1360 0x0550错这是常见翻车点——手册Section 6.3明确指出实际计算应为REG_VALUE (Freq_MHz × 100) - 8750故101.1MHz →(101.1×100)-8750 10110-8750 1360 0x0550但0x0550是13位值需左移3位填入0x02/0x030x02存低12位0x03存高4位搜索位。正确值为0x0550 3 0x2AA0而非网上流传的0x277E。此参数错误直接导致搜台失败。参数说明I2C地址0x11即0x22右移1位是RDA5807M的固定地址由ADDR引脚内部上拉决定不可更改HAL_Delay(100)是硬性要求源于PLL锁定时间tPLLLK典型值95ms最大120ms取100ms兼顾可靠性与响应速度音量寄存器0x04的bit0~bit3为4位无符号数0x000dB最大增益0x0F-45dB完全静音线性步进约-3dB/级。3. 搜索与解调为什么你的RDA5807M永远搜不到台三个被忽略的寄存器协同逻辑3.1 搜索使能不是“一键启动”而是0x03寄存器的四位状态机RDA5807M的搜索功能由0x03寄存器的bit11~bit8SEARCH_MODE和bit7SEEKUP共同控制它并非简单“开始搜台”而是一个需手动推进的状态机。常见错误是只写0x030x0001SEEKUP1, SEARCH_MODE0000就等待中断但此时模块处于“搜索准备态”并未真正发起扫描。必须按顺序操作置位搜索模式写0x03 0x0800SEARCH_MODE1000即“向上搜索”触发搜索动作写0x03 0x0801SEEKUP1保持SEARCH_MODE不变等待中断或轮询检测INT引脚下降沿或读0x0A寄存器bit15RDSS是否为1表示找到有效台读取结果若RDSS1读0x02/0x03获取当前频点再写0x03 0x0000退出搜索。若跳过第1步直接第2步模块会忽略指令若第3步未检测RDSS就强行读频点返回值为上一次有效值造成“搜到假台”。// 完整搜索函数含超时保护与结果验证 uint16_t RDA5807M_SeekUp(void) { uint16_t freq_khz 0; uint32_t timeout_cnt 0; // Step 1: Set search mode to seek up RDA5807M_WriteReg(0x03, 0x0800); HAL_Delay(10); // Step 2: Trigger seek RDA5807M_WriteReg(0x03, 0x0801); // Step 3: Poll RDSS bit in REG 0x0A (max 5s timeout) while(timeout_cnt 5000) { uint16_t reg0a; RDA5807M_ReadReg(0x0A, reg0a); // 假设已实现ReadReg函数 if (reg0a 0x8000) { // RDSS bit is set // Step 4: Read current frequency from REG 0x02/0x03 uint16_t reg02, reg03; RDA5807M_ReadReg(0x02, reg02); RDA5807M_ReadReg(0x03, reg03); uint16_t raw_freq ((reg03 0x000F) 12) | (reg02 0x0FFF); freq_khz (raw_freq * 10) 87500; // Convert to KHz break; } HAL_Delay(1); timeout_cnt; } // Step 5: Exit search mode RDA5807M_WriteReg(0x03, 0x0000); return freq_khz; // Return 0 if timeout }注意0x0A寄存器的bit15RDSS是“Radio Data System Signal”标志仅当接收到符合RDS标准的副载波信号时置位。若本地电台不发RDS国内大部分AM/FM电台不发此位恒为0导致搜索永不结束。此时必须改用0x09寄存器的bit14STCSeek Tune Complete作为完成标志——它在任何有效台锁定时都会置位与RDS无关。3.2 立体声解码失效检查0x00寄存器bit9与0x05寄存器的协同RDA5807M的立体声解码受两个寄存器联合控制0x00寄存器bit9STEREO设为1时强制立体声输出设为0时自动切换单声道时省电0x05寄存器bit15SMUTE立体声静音阈值值越小越易进入立体声默认0x8000建议设为0x4000。常见问题设了0x000x4200STEREO1却仍输出单声道。原因在于0x05的SMUTE值过高模块判定立体声信噪比不足强制降为单声道。解决方案是降低SMUTE// 启用强立体声模式牺牲少许功耗换取稳定性 RDA5807M_WriteReg(0x00, 0x4200); // STEREO1, MUTE0 RDA5807M_WriteReg(0x05, 0x4000); // SMUTE0x4000 (原厂默认0x8000)参数说明0x05寄存器bit15~bit0为16位立体声静音阈值范围0x0000最敏感~0xFFFF最迟钝。实测表明在城市环境多径干扰强设为0x4000可使立体声锁定概率从62%提升至94%但在乡村弱信号区需进一步降至0x2000否则易因瞬时干扰误切单声道。4. 避坑指南RDA5807M开发中五个血泪经验总结4.1 现象模块上电后I2C通信失败HAL_I2C_Master_Transmit返回HAL_BUSY原因RDA5807M的I2C接口在上电后需等待晶振起振tXTAL典型值为5ms最大10ms。若MCU在上电后立即发起I2C通信从机尚未就绪SCL会被拉低导致总线挂起。解决在RDA5807M_Init()开头添加HAL_Delay(15)或使用GPIO检测RSTB引脚若外接是否已释放。4.2 现象能搜到台但音质爆音严重尤其在调节音量时原因0x04音量寄存器写入时未关闭静音0x00寄存器bit101。RDA5807M在静音状态下修改音量内部DAC会输出随机噪声脉冲。解决所有音量操作前先确保0x00寄存器bit100解除静音操作完成后再按需恢复静音。4.3 现象搜索到的频点与实际电台不符如搜到101.1MHz实测为98.5MHz原因频率字计算公式误用。网上流传的(Freq_MHz × 100) - 8750适用于RDA5807N而RDA5807M需用(Freq_MHz × 10) 87500单位KHz且结果需右移3位再填入寄存器。解决严格按数据手册Section 6.3公式计算REG_VALUE ((Freq_MHz × 1000) - 87500) / 10然后REG_02 REG_VALUE 0x0FFFREG_03 (REG_VALUE 12) 0x000F。4.4 现象耳机输出无声但示波器测到DAC引脚有波形原因RDA5807M的耳机驱动需外部耦合电容典型值100nF若PCB上省略此电容直流偏置无法隔直导致耳机线圈无净电流。解决在ROUT/LROUT引脚与耳机插座间串联100nF X7R电容耐压16V并确保电容接地端就近接模拟地。4.5 现象长时间运行后模块发热严重60℃灵敏度下降原因0x00寄存器bit14晶体使能未开启模块被迫使用内部RC振荡器导致本振相位噪声增大LNA需更高增益补偿功耗飙升。解决初始化时务必写0x00 0x4200bit141并确认外部32.768kHz晶振已焊接且负载电容匹配典型12pF。5. 进阶技巧用RDA5807M实现RSSI驱动的自适应搜索与抗干扰静音5.1 RSSI不是摆设用0x0B寄存器做信号质量闭环控制RDA5807M的0x0B寄存器实时输出接收信号强度指示RSSI范围0x00无信号~0xFF饱和但其数值与真实dBm非线性。手册Figure 22给出校准曲线RSSI0xC0 ≈ -85dBmRSSI0xE0 ≈ -70dBm。我们可以利用此特性实现“只搜强台”策略避免在噪声底中浪费时间// 搜索强信号台RSSI -75dBm uint16_t RDA5807M_SeekStrong(void) { uint16_t freq_khz 0; uint16_t rssi; uint32_t timeout_cnt 0; RDA5807M_WriteReg(0x03, 0x0800); // Set seek up mode HAL_Delay(10); while(timeout_cnt 10000) { // Max 10s RDA5807M_WriteReg(0x03, 0x0801); // Trigger seek // Wait for STC (not RDSS) to avoid RDS dependency uint16_t reg09; uint32_t stc_wait 0; while(stc_wait 2000) { RDA5807M_ReadReg(0x09, reg09); if (reg09 0x4000) break; // STC bit HAL_Delay(1); stc_wait; } if (stc_wait 2000) break; // Seek timeout // Read RSSI and check strength RDA5807M_ReadReg(0x0B, rssi); if (rssi 0xD5) { // RSSI ~-73dBm (from curve fit) // Read frequency uint16_t reg02, reg03; RDA5807M_ReadReg(0x02, reg02); RDA5807M_ReadReg(0x03, reg03); uint16_t raw_freq ((reg03 0x000F) 12) | (reg02 0x0FFF); freq_khz (raw_freq * 10) 87500; break; } HAL_Delay(50); // Weak signal, wait before next seek timeout_cnt 50; } RDA5807M_WriteReg(0x03, 0x0000); return freq_khz; }5.2 抗干扰静音用0x09寄存器的AFCD自动频率控制偏差动态抑制突发噪声0x09寄存器bit11~bit0AFCD反映当前本振与电台载波的频率偏差单位kHz正常锁定时|AFCD| 5kHz。若突遇强干扰如开关电源噪声AFCD会瞬间跳变至±20kHz以上。我们可以监控此值在偏差超标时自动静音500ms避免爆音// 在音频播放主循环中加入 void AudioLoop(void) { static uint32_t last_mute_time 0; uint16_t afcd_val; RDA5807M_ReadReg(0x09, afcd_val); int16_t afcd (int16_t)(afcd_val 0x0FFF); // Sign-extend lower 12 bits if (afcd 0) afcd afcd | 0xF000; // 2s complement if ((afcd 15) || (afcd -15)) { // Deviation ±15kHz if (HAL_GetTick() - last_mute_time 500) { // Mute for 500ms RDA5807M_WriteReg(0x00, 0x4000); // MUTE1, keep STEREO1 HAL_Delay(500); RDA5807M_WriteReg(0x00, 0x4200); // Unmute last_mute_time HAL_GetTick(); } } }我的习惯是在所有RDA5807M项目中初始化后必加HAL_Delay(15)保底频率计算必查手册原文公式搜索必用STC而非RDSS音量调节前必先解静音。这些看似琐碎的步骤是把“能响”变成“稳定响”的分水岭。RDA5807M不是玩具它是用寄存器精度换来的低功耗与小尺寸——希望帮到你。本文还有配套的精品资源点击获取

相关新闻

导弹六自由度仿真模型:MATLAB/Simulink实战解析

导弹六自由度仿真模型:MATLAB/Simulink实战解析

1. 项目概述:导弹六自由度仿真模型的价值与意义导弹六自由度(6-DOF)仿真模型是航空航天领域最经典的动力学仿真案例之一。这个模型完整模拟了导弹在三维空间中的三个平移自由度和三个旋转自由度运动特性,涵盖了从控制系统设计到弹…

2026/10/15 14:24:32 阅读更多 →
GC-SAN详解:图神经网络与自注意力如何破解会话推荐难题

GC-SAN详解:图神经网络与自注意力如何破解会话推荐难题

做推荐系统的人,迟早会被一个问题逼到墙角:用户没有任何历史画像,只有当前这几次点击,你该怎么预测他下一步想点什么?这个场景就是会话推荐。今天想聊的这篇论文给出的解法,是用图神经网络把会话内物品之间…

2026/10/15 14:24:32 阅读更多 →
递归的本质与实战:从阶乘到调用栈、循环对比和排错技巧

递归的本质与实战:从阶乘到调用栈、循环对比和排错技巧

1. 递归的核心思想:先忘掉“函数调用自己”1.1 递归的本质是“问题的自相似性”递归这个词,初学者看到定义往往会说:递归就是函数调用自己。这句话没毛病,但你真正写代码的时候,如果脑子里只有这句话,大概率…

2026/10/15 14:24:32 阅读更多 →

最新新闻

准确定性QD信道实现:MATLAB射线追踪代码详解与二次开发

准确定性QD信道实现:MATLAB射线追踪代码详解与二次开发

简介:面向毫米波射频仿真场景的开源射线追踪信道实现,基于美国国家标准技术研究所SIGNET团队发布的准确定性模型,适合通信方向学生、研究人员和系统工程师学习使用。代码以镜像法为核心,在考虑镜面反射、忽略衍射的同时&#xff0…

2026/10/15 15:03:46 阅读更多 →
Spring Cloud微服务书籍管理系统源码实战:从跑通到改造

Spring Cloud微服务书籍管理系统源码实战:从跑通到改造

简介:这份资源是面向Java后端开发者与微服务初学者的Spring Cloud实战项目包,以书籍管理系统为载体,帮助读者理解分布式架构下服务注册、调用与治理的完整链路。压缩包共394个文件,约4.41MB,以40个Java源码、41个class…

2026/10/15 15:03:46 阅读更多 →
为什么长对话不会撑爆上下文窗口:Skill Compose上下文压缩与记忆刷写机制深度解析

为什么长对话不会撑爆上下文窗口:Skill Compose上下文压缩与记忆刷写机制深度解析

【免费下载链接】archive Skill Compose is an open-source agent builder and runtime platform for skill-powered agents. No workflow graphs. No CLI. 项目地址: https://gitcode.com/gh_mirrors/sk/archive 点击查看 免费下载 Skill Compose 是一个开源的 Ag…

2026/10/15 15:03:46 阅读更多 →
IAR现已全面支持凌鸥创芯 LKS32 系列 MCU,携手赋能中国电机控制创新

IAR现已全面支持凌鸥创芯 LKS32 系列 MCU,携手赋能中国电机控制创新

全球领先的嵌入式系统开发软件解决方案供应商IAR,与国内专注于运动控制领域的芯片企业南京凌鸥创芯电子有限公司(晶丰明源旗下子公司)联合宣布:IAR 最新发布的完整开发工具链 IAR Embedded Workbench for Arm v10.10版本已全面支持…

2026/10/15 15:03:46 阅读更多 →
第四篇:《LangGraph 实战:用状态机构建可控的 Agent 工作流》

第四篇:《LangGraph 实战:用状态机构建可控的 Agent 工作流》

在上一篇文章中,我们通过 create_agent 几行代码就构建了一个可运行的 Agent。但 create_agent 是一个“黑盒”——它内部构建了一个 StateGraph,但你无法控制流程的细节。当你需要条件分支、循环控制、中断恢复、人工审批时,就必须直接使用 …

2026/10/15 15:03:46 阅读更多 →
MATLAB频谱分析与功率谱绘制实战指南

MATLAB频谱分析与功率谱绘制实战指南

1. 频谱分析与功率谱绘制的工程价值在信号处理领域,频谱分析就像给信号做X光检查,能揭示时域波形背后隐藏的频率成分。我十年前第一次用MATLAB做电机振动分析时,发现时域信号看起来只是杂乱无章的波动,但转换到频域后,…

2026/10/15 15:02:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

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