ADS122U04与PIC18LF47K40高精度温度采集系统设计实战

发布时间:2026/11/5 3:12:42

ADS122U04与PIC18LF47K40高精度温度采集系统设计实战 1. 方案选型为什么是 ADS122U04 PIC18LF47K401.1 一颗带 UART 的 24 位 ADC省掉的不仅是两根线先聊一个很实际的问题工业现场测温度单片机选谁不重要真正决定测量上限的是ADC这一关。你拿一颗10位、12位的MCU内置ADC去测热电偶热电动势本身就只有几毫伏到几十毫伏一个LSB可能就是好几个摄氏度根本没法用。所以我做温度采集项目时习惯直接在方案前端放一颗高分辨率外部ADC而不是反复打磨MCU内部ADC的软件均值。ADS122U04这个型号最吸引我的地方是它把24位Δ-Σ ADC和UART接口做在了一起。市面上常见的24位ADC比如ADS1220走的是SPI接口主机要自己拉时钟、拉片选时序紧张的时候还要用DMA或者中断去伺候。而ADS122U04这颗芯片直接通过两根线TXD/RXD跟MCU通信距离可以拉得更远现场接线也更简单还省掉了SPI时序上那些麻烦事。对于PIC18LF47K40这种8位单片机来说UART通信简直是零压力一个EUSART外设就搞定了。再说一下为什么不用I2C。I2C虽然有地址概念理论上可以挂多个设备但I2C的上拉电阻在长线、强干扰的工业环境里特别容易出问题速率也上不去。UART就不一样标准RS-232电平或者配合外部RS-485收发器在几十米的距离内依然能稳定跑9600、19200波特率。HVAC的现场控制柜到传感器端子箱之间经常就是这个距离级别。1.2 PIC18LF47K40一颗执行力够用的老伙计PIC18LF47K40是Microchip的8位单片机工作电压1.8V到3.6V正好可以跟ADS122U04共用3.3V电源轨。它内部有一个最高能跑到64MHz的振荡器带PLLFlash和RAM做温度采集协议栈绰绰有余。我选这颗片子还有一个私心它的EUSART模块在8位机里算非常好用的自动波特率检测、9位数据模式、多机通信这些功能都有做Modbus或者自定义协议都很顺手。有人可能会嘀咕8位机处理24位数据是不是太吃力其实压力不大。ADS122U04把数据包装成串行字节流MCU只需要一个字节一个字节地从UART接收寄存器里取数拼装成uint32_t类型。温度换算的无符号除法、查表这类操作在PIC18LF47K40的1MIPS到16MIPS性能范围里完全够用。如果你跑在64MHz一条除法指令也没慢到哪里去整个采集周期里真正花时间的反而是ADC的转换时间。1.3 系统整体架构与数据流走向这个项目的整体结构并不复杂前端是温度传感器中间是ADS122U04负责把微小的模拟信号放大、数字化再通过UART把数据丢给PIC18LF47K40最后由MCU做单位换算、滤波、协议打包送给上位机或者触摸屏。传感器可以是K型热电偶、PT100/PT1000铂电阻或者NTC热敏电阻取决于你是在做工业炉温监测还是HVAC的风管温度、水管温度采集。整套数据流的处理量不大真正的技术点集中在三块硬件上传感器和ADC的接口电路怎么搭固件上UART协议怎么稳定收发以及软件上怎么把原始码变成有意义的温度值。下面我按这个顺序把每一步展开讲清楚。2. 硬件设计把传感器信号变成干净的比特流2.1 吃透 ADS122U04 的内部资源在动手画原理图之前最好先把ADS122U04的内部结构捋一遍。它本质上是一个24位Δ-Σ ADC前端带了可编程增益放大器PGA、输入多路复用器、两个可编程电流源IDAC内部还集成了一个温度传感器。输入通道4个外部模拟输入AIN0~AIN3可以配置成两个差分输入对也可以配置成四个单端输入。PGA增益从1倍到128倍可选放大热电偶这种微伏级信号是它的看家本领。IDAC电流源两个可调电流源输出电流从50µA到1500µA可配主要是给RTD和偏置电阻提供激励。内部温度传感器用于热电偶冷端补偿CJC省掉一个外置测温芯片。参考电压支持内部2.048V基准也支持外部REFP/REFN差分基准。采样速率20SPS到2kSPS可配测温场景我一般固定在20SPS配合内部FIR滤波器50Hz、60Hz工频干扰能压制得很干净。这些资源对应到实际项目就是不同的接法。比如测热电偶用内部基准高增益就够了测PT100/PT1000要动用IDAC和外部基准电阻做比例式测量。一开始我也是按PDF前面几页的最小系统乱接后来才发现真正影响精度的是对内部资源的使用方式。2.2 最小系统接线与电源处理ADS122U04的电源域分模拟电源AVDD和数字电源DVDD我建议直接用一个低噪声LDO输出3.3V同时给AVDD和DVDD供电中间用磁珠隔开。参考电压这一块测温项目我用的是内部2.048V基准省去外部基准芯片不过REFN引脚和REFP引脚之间要就近放一颗100nF电容否则内部基准的噪声会把有效分辨率拉下来。PIC18LF47K40和ADS122U04之间连线就四根TXD接RXD、RXD接TXD双方共地再加一个复位信号。UART的TXD/RXD线如果走线超过10cm建议串33Ω到100Ω电阻减少振铃。PCB布局上模拟输入走线要短尽量远离数字信号线和时钟线这一点在工业控制板上做起来比较难但至少要把AIN走线的下面保持完整的参考地平面。上电时序也要注意先给ADC上电等它完成内部上电复位再发UART命令。PIC18LF47K40的固件里我会做300ms的延时确保ADS122U04的晶体振荡器起振稳定否则第一次通信大概率会失败。2.3 三种典型传感器接入电路第一种是热电偶。K型热电偶的两根线直接接到AIN0和AIN1构成差分输入PGA增益我习惯设到128倍。热电偶输出的毫伏级信号经过放大以后进入ADC冷端补偿用片内温度传感器读出来的芯片温度去算。要注意的是热电偶引线如果从金属铠装护套里面穿出来暴露在外的端子部分存在热电动势的二次叠加最好把冷端端子做在铜排或大面积铜箔上减小热梯度。第二种是PT100/PT1000比例式接法。用一个IDAC电流源给RTD提供激励电流电流经过RTD后在RTD两端产生一个电压这个电压进入PGA差分输入。同时同一股电流经过一个精密基准电阻RrefRref两端的电压接到REFP和REFN。此时ADC测到的是Vrtd与Vref的比值乘以Rref就能算出Rrtd激励电流源的温漂和绝对误差在计算中被抵消了。注意Rref必须选低温漂电阻我常用0.1%精度、5ppm温漂的金属箔电阻。第三种是NTC热敏电阻。HVAC里常见的10kΩ NTC可以用IDAC给NTC和参考电阻供同一个电流NTC电压进PGA参考电阻电压进VREF同样构成比例式测量。NTC的B值离散性大正规做法是出厂前做两点校准或者直接采用NTC厂商提供的R-T分度表。3. 固件开发让 PIC18LF47K40 和 ADC 对话3.1 UART 命令帧理解与同步策略ADS122U04的串行协议是我用这颗芯片时花时间最长的地方。它不像普通外设那么简单发个命令就完而是要处理好帧同步和命令响应。手册里明确要求每次命令以同步字节开头这个同步字节是0x00我实际调通的方式是拉低TXD一段时间产生一个UART的break状态再恢复高电平然后发送0x00同步字节最后发命令字节和CRC字节。这一套操作能显著提升第一次通信的成功率尤其在芯片刚上电、波特率尚未对齐的阶段。命令集主要包括读寄存器RREG、写寄存器WREG、读转换数据RDATA、复位RST和掉电PWDN。执行读寄存器或读数据命令后主机要等待从机返回数据帧返回数据的第一部分是状态字节后面跟着你要读的内容。我调试过程中发现数据返回时间不能按“命令发完立刻读”来写必须根据设置的采样速率预留足够的转换时间否则读到的是上一次的结果或者干脆读到全零。CRC计算在协议里是可选项。工业环境建议把这个功能打开PIC18LF47K40有硬件CRC运算支持但操作起来未必方便我最后还是用软件查表法算了8位CRC占用的代码空间很小运行时间也不长。3.2 PIC 侧 EUSART 初始化与波特率计算PIC18LF47K40的EUSART初始化要看数据手册里的波特率公式。在16位波特率模式下SPBRG寄存器的值这样算SPBRG Fosc / (16 × BaudRate) - 1我用的系统时钟是64MHz内部振荡器加PLL目标波特率9600那么SPBRG 64,000,000 / (16 × 9600) - 1 416.67 - 1 ≈ 416取SPBRG416实际波特率等于64,000,000 / [16 × (416 1)] 9602.4bps误差只有0.025%完全没问题。如果你用3.6864MHz或者4MHz晶振算出来的SPBRG可能不是整数这时要手动验证一下是否落在1%误差范围内UART通信超过2%的波特率误差就容易出乱码。// PIC18LF47K40 EUSART1 初始化3.3V供电64MHz系统时钟9600bps void uart1_init(void) { TRISCbits.TRISC6 1; // TX1 引脚设为输入由外设控制输出 TRISCbits.TRISC7 1; // RX1 引脚设为输入 BAUD1CON 0x00; // 8位数据无奇偶校验1位停止位 RC1STA 0x40; // 使能接收模块 TX1STA 0x20; // 使能发送模块 SPBRG1 416; // 64MHz / (16 * 9600) - 1 ≈ 416 SPBRGH1 0; TX1STAbits.TXEN 1; // 使能发送 RC1STAbits.CREN 1; // 使能连续接收 }我习惯在初始化之后发送一个0x55二进制01010101自己抓一下回环波形确认电平翻转正常再进入协议流程。3.3 配置寄存器顺序和关键位ADS122U04内部有多个控制寄存器地址从0x00到0x04以上分别对应输入多路复用器、PGA增益与操作模式、数据速率、IDAC配置、基准电压和传感器设置。这里我不逐位照搬数据手册而是把一套经过实测的配置顺序记录下来。第一步发送RST命令让芯片复位到默认状态。之后延时至少10ms让内部上电复位完成。第二步写寄存器0x01把PGA增益设置成128倍、测量模式选择为连续转换。第三步写寄存器0x02把数据速率设成20SPS同时确认工作在正常模式而不是低功耗待机模式。第四步配置IDAC电流源设置输出电流大小并把电流源路由到正确的AIN引脚。第五步设置参考源我用的是内部2.048V基准并开启内部温度传感器。寄存器配置顺序之所以重要是因为某些位的组合是有冲突的。比如当PGA增益大于某档时输入信号幅度必须低于供电电压的某个比例你如果先设了增益再改输入通道MUX的切换可能导致输出瞬态饱和读数要等几个转换周期才能恢复。3.4 核心代码读取转换数据并换算温度连续转换模式启动以后ADC会按照设定的数据速率不断刷新转换结果。主机可以随时发送RDATA命令读取当前数据也可以配置成数据就绪后自动上传的模式。自动上传模式虽然省一条命令但要求主机的接收时序一定要稳我这次的项目里用的是主动查询方式简单靠谱逻辑也更清晰。下面这段代码是读取一次24位转换数据的核心逻辑。注意ADS122U04输出的是二进制补码格式如果是负温度差分信号最高位会是1必须先把3个字节拼成uint32_t再强制转换成int32_t再做除法否则负数会被当成很大的正数。int32_t ads122u04_read_raw(void) { uint8_t b0, b1, b2; int32_t raw; // 发送同步字节和RDATA命令 uart1_write(0x00); uart1_write(0x10); // RDATA, 读取24位转换结果 // 等待响应根据20SPS的转换周期预留足够时间 b0 uart1_read_blocking(); b1 uart1_read_blocking(); b2 uart1_read_blocking(); raw ((int32_t)b0 16) | ((int32_t)b1 8) | (int32_t)b2; // 如果符号位为1补齐高8位 if (raw 0x800000) { raw | 0xFF000000; } return raw; }拿到24位原始码之后要换算成电压V_in raw × (2 × Vref) / (Gain × 2^23)拿这个电压值去查热电偶分度表或者用PT100的Callendar-Van Dusen公式反算温度。查表求温度我建议直接用线性插值分度表每隔5°C一个点就够了非线性误差不会超过0.1°C。如果你嫌表格占Flash空间HVAC这种0°C到100°C范围的场合用多项式拟合NTC电阻-温度曲线也能做到0.2°C以内。4. 校准与精度优化24 位分辨率的正确打开方式4.1 偏移校准和增益校准24位ADC不代表24位精度出厂后如果不校准偏移误差和增益误差会让你实际测出来的温度偏个一两度。我在项目里做的是软件校准工艺上叫“标定”方法很简单。先把PGA输入端短接采集1024次求平均得到偏移码offset。再输入一个已知的精密电压Vcal采集均值得到gain码。校准后的电压值V_corrected [(raw - offset) / (gain - offset)] × Vcal如果测的是电阻比例值增益校准可以等价写成一个系数。校准数据我建议存到PIC18LF47K40的Flash数据区里每台设备出厂前标一次换传感器后再标一次。很多HVAC控制器上的“传感器偏差修正”功能本质上就是这一套。4.2 热电偶冷端补偿与 RTD 比例式测量的细节热电偶测的是热端和冷端的温差电动势必须对冷端温度进行补偿。ADS122U04内部温度传感器可以直接读芯片温度这一路数据帮我省了一个外置芯片。但要注意内部温度传感器反映的是芯片的管芯温度跟热电偶接线端子的实际温度会有差异尤其是靠近CPU、电源模块等发热源时。严谨的做法是在热电偶端子附近贴一颗NTC把NTC接到另一个ADC通道用NTC读到的冷端温度去补偿这样响应更贴近现场。RTD比例式测量在硬件部分已经说过了这里说计算结果。Rrtd code_ratio × Rref比率式的算法天然抵消了IDAC电流源的温漂所以硬件上只要保证Rref足够精确就可以了。算完Rrtd之后用多项式或者查表求温度。PT100在0°C到100°C的区间线性度已经还行但严格做还是要用ITS-90的分度公式。4.3 现场抗噪与滤波策略温度信号是缓变信号完全可以用低采样率换取高噪声抑制。ADS122U04在20SPS下的有效分辨率明显高于高速模式因为Δ-Σ调制器内部的数字滤波器把带外噪声压得很低。我在固件里又加了一层移动平均滤波窗口长度取16个转换结果。实测下来原本1°C左右的跳动可以压缩到0.05°C以内。如果现场有变频器那就要小心共模干扰了。HVAC系统里变频风机一启动测温信号经常会被拉偏。我的经验是电源端加共模电感信号线用屏蔽双绞线并把屏蔽层单端接地ADC的模拟地和数字地在芯片下方单点连接。还有一个容易被忽视的点给REFP、REFN引脚接的100nF电容位置一定要紧贴芯片引脚走线长了效果大打折扣。5. 实战排雷我在这套方案里踩过的坑5.1 ADC 不响应命令第一次上电调试时满心欢喜地发RREG命令想读寄存器结果UART接收端一个字节都没等到。查了一圈发现根子是芯片还没从复位状态下缓过来。ADS122U04上电后需要一段时间完成内部初始化我把上电延时从几百微秒改成300ms后问题消失。另一个容易踩的是波特率设置我一开始在PIC侧配错了分频系数实际波特率偏了7%芯片自然不理你。用示波器抓一下TXD引脚的高电平宽度跟理论值一对比就能确诊。此外帧同步字节0x00还有个大坑。如果主机在发命令之前发送了0x00之外的数据或者TXD线在空闲时电平不稳芯片的帧同步状态机会错乱。我采取的对策是每次命令前先拉低TXD一段时间产生break再把TXD恢复高电平20µs以上然后才发出0x00同步字节。这个对策看起来原始但在现场主机和从机上电时间不同步的场景里非常管用。5.2 测量数据跳动剧烈PCB做回来之后我把K型热电偶接上屏幕上看到的温度值乱跳幅度高达三度。排查过程是从电源开始的。先用示波器看3.3V电源纹波发现LDO的输出在130mV左右这在ADC的模拟电源上是不能忍的。换了一颗低噪声LDO并在AVDD引脚旁边加了10µF钽电容和100nF陶瓷电容组合纹波降到了20mV以内。第二个因素是输入悬空。差分输入的公共端必须要有一个偏置路径不然浮空电势会把PGA打出虚高偏置。我给AIN0和AIN1各自对地接了一颗1MΩ电阻用作输入偏置泄放跳动问题基本消失。单片机侧的注意事项是读取UART时如果长时间不读UART而让接收缓冲区溢出后续所有时序都会错位所以主循环里要定时清缓冲区的溢出标志。5.3 温度漂移方向诡异有一台样机早上开机测室温是25°C到中午变成25.8°C但水银温度计一点没变。这种每天都往上跑的“温漂”多半不是ADC本身温漂而是板上其他发热源通过热传导影响了冷端。我把热电偶端子移到了板边并用镂空隔热带把PCB上电源电路的热量隔开读数就稳定了。还有一次是RTD测量在高温段整体偏高。后来逐个排查发现问题出在激励电流过大导致RTD自热效应明显。PT100在1mA激励下自热约0.1°C到几mA就可能会到0.5°C。我把IDAC电流从1.5mA调低到500µA自热误差明显减小。这就回到一个基本原则传感器被测对象受到的干扰和激励源大小密切相关能小则小。5.4 排查速查表现象可能原因解决办法完全无响应上电时间不够、波特率偏差过大、TXD电平反接延时300ms、重新计算SPBRG、对调TXD/RXD乱码错位同步字节被干扰、CRC校验不通过break唤醒、开启CRC、降低波特率读数剧烈跳动电源纹波大、输入悬空、接地不良换低噪声LDO、加偏置电阻、单点接地数值随温度漂移冷端热梯度、RTD自热端子移出热区、降低IDAC电流温度整体偏高增益校准未做、Vref精度差做标定、换更高精度参考电阻低温段读数负值乱跳24位符号扩展没做检查int32_t符号扩展逻辑最后分享一个在实际项目里很实用的小设计我在这套PIC固件里预留了一组调试命令可以在不重新编译程序的情况下随时读ADC原始码、读校准系数、读芯片温度。现场出问题时连一个串口调试助手就能把整条链路拆开看。这个习惯帮我省了不知道多少跑去现场诊断的时间。ADS122U04和PIC18LF47K40这套组合整体成本不高、实现难度适中但把测量链路里的每一个误差来源都治住之后它能达到的稳定度和精度绝对对得起这个价位。
延伸阅读

更多相关文章

2026/11/5 3:12:42

基于ADS122U04与PIC18F46K42的高精度工业温度采集方案

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

2026/11/5 3:12:42

ADS122U04+STM32L4高精度温度采集系统:兼容热电偶/PT100/NTC

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

2026/11/5 3:12:42

ADS122U04与STM32L442工业测温方案实战:从模拟前端到抗干扰

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

2026/11/5 4:12:51

IWOA双目标柔性车间调度MATLAB源程序与算例

简介:面向柔性车间调度与群智能优化方向的学习者,这份MATLAB程序包围绕改进鲸鱼算法(IWOA)求解双目标调度问题展开,兼顾总完成时间、能耗或碳排放等目标的权衡。包内共17个文件,以16个.m脚本和1篇.pdf论文为…

2026/11/5 4:12:51

ROS机械臂VLA系统设计与优化实践

1. 项目背景与目标作为一名刚接触ROS和深度学习的学生,我选择了一个结合视觉-语言-动作(VLA)的机械臂控制系统作为毕业设计课题。这个系统的核心目标是让机械臂能够理解自然语言指令,在仿真环境中完成物体抓取和放置任务。比如当用…

2026/11/5 4:12:51

企业AI落地:挑战与用友BIP智能双模解决方案

1. 企业AI落地的核心挑战与破局思路最近参加了用友的BIP企业AI产品发布会,现场1000多名生态伙伴的热情让我深刻感受到:企业AI的落地已经不再是技术问题,而是如何跨越"可信、数据、价值"这三重门的系统工程。作为从业十余年的企业数…

2026/11/5 4:12:51

微信接口频控优化:多级缓存与限流实战

1. 项目背景与核心挑战去年帮朋友搭建查券导流公众号时,遇到最头疼的问题就是微信接口的调用频率限制。当用户集中查询商品优惠信息时,经常触发微信的频控机制,导致服务间歇性不可用。经过两周的踩坑和优化,最终通过本地缓存兜底方…

2026/11/5 4:12:51

vDisk课表同步方案:Windows与Linux双平台配置指南

1. vDisk课表同步方案概述在教育信息化快速发展的今天,vDisk IDV云桌面解决方案为学校和培训机构提供了高效的虚拟化教学环境。其中,课表同步功能作为核心管理模块,能够将教务系统的课程安排数据无缝对接至vDisk平台,实现教学资源…

2026/11/5 4:07:50

C#键盘鼠标模拟库Input Simulator:SendInput选型与避坑指南

简介:这份 C# 代码包围绕 Windows 平台的键盘与鼠标输入模拟展开,基于 Windows Input Simulator 扩展了鼠标事件支持,面向需要实现自动化输入、辅助测试或交互演示的 C# 开发者,适合具备一定 Win32 与 C# 基础的中级读者。压缩包共…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑