新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于STM32的智能停车场车位检测系统设计与实现

发布时间:2026/9/4 6:23:49来源:尧图网络
基于STM32的智能停车场车位检测系统设计与实现
简介本资源是一套完整的基于STM32的停车场车位占用检测系统实现方案面向高校电子类、自动化及物联网方向本科生适用于毕业设计与嵌入式课程实践场景解决真实停车场中车位状态感知、本地判别与信息反馈等核心问题。压缩包共856个文件含361个C源码主控逻辑、传感器驱动、通信协议栈、152个头文件外设配置、模块接口定义、44个汇编启动文件及大量编译中间产物.o/.d/.axf另有PCB原理图.schdoc/.pcbdoc、HMI工程文件及HAL库配置备份完整覆盖硬件设计、固件开发、调试部署全流程包体大小32.2MB。目前已有240人学习下载。读者可直接复现磁感应/超声波车位检测功能深入理解STM32F1系列ADC采样滤波、GPIO状态机控制、USART/MQTT通信集成及低功耗管理策略并参考多版本备份文件.bak/.crf掌握工程迭代与排错方法。1. 项目概述与核心价值最近在整理资料翻到了几年前做的一个基于STM32的停车场车位占用检测系统当时是作为毕业设计和一门嵌入式系统课程的大作业来完成的。这个项目虽然听起来不复杂但麻雀虽小五脏俱全从传感器选型、硬件电路设计、单片机编程到简单的上位机数据显示整个流程走下来对嵌入式开发的各个环节都能有比较深刻的理解。现在很多学校的相关专业依然会布置类似的项目网上也能找到不少开源资料但很多都只给了代码和原理图缺少对“为什么这么设计”的深入拆解以及实际做的时候会踩哪些坑。今天我就把这个项目重新梳理一遍结合我当时做的和后来的一些思考聊聊怎么从零开始搭建一个稳定可用的车位检测系统希望能给正在做类似课题的学弟学妹或者刚接触STM32的嵌入式爱好者一些实实在在的参考。这个系统的核心目标很明确实时、准确地检测停车场内每个车位的占用状态并将信息直观地显示出来。它要解决的就是传统停车场里司机需要开着车一圈圈找空位的痛点。我们实现的方案是在每个车位上安装一个检测模块我们当时用的是超声波传感器模块将检测到的距离数据通过无线或有线方式发送到一个中央处理单元就是我们的STM32主控主控判断车位状态后再通过显示屏比如OLED或者LCD展示整个停车场的车位地图空位亮绿灯占用亮红灯。整个系统涉及硬件电路设计、传感器驱动、通信协议、状态判断算法和用户界面是一个典型的嵌入式综合应用项目。2. 系统整体设计与方案选型做嵌入式项目第一步不是急着写代码而是先把系统架构和各个模块的选型定下来。这就像盖房子先画图纸选什么材料直接影响后续的施工难度和最终效果。2.1 核心控制器为什么是STM32主控芯片的选择几乎是首要决策。当时市面上常见的单片机有51、AVR、STM32等。我们最终选择了STM32F103C8T6也就是常说的“蓝桥杯”或“最小系统板”核心芯片。理由很充分性能与资源基于ARM Cortex-M3内核主频72MHz远超传统的8位单片机。这意味着它有足够的算力来处理多个传感器的数据、运行状态判断逻辑以及驱动显示模块。其内置的Flash和SRAM也足够存放我们的程序和变量。丰富的外设STM32F103系列拥有多个USART串口、SPI、I2C、ADC和定时器。这为我们连接传感器可能需要ADC或定时器、驱动显示屏通常用I2C或SPI、以及可能的无线模块如ESP8266通过串口AT指令通信提供了极大的灵活性。开发生态与成本STM32拥有非常完善的生态系统官方提供的标准库Standard Peripheral Library和后来主流的HAL库Hardware Abstraction Layer大大降低了开发门槛。配套的IDE如Keil MDK、STM32CubeIDE和调试工具ST-Link也成熟易用。最关键的是这款芯片及其核心板价格非常亲民非常适合学生项目。学习价值STM32在工业界应用极广通过这个项目熟练掌握STM32开发对后续求职或深造都很有帮助。2.2 车位检测方案对比与选择如何检测车位上有无车辆这是项目的核心传感部分。我们当时主要评估了以下几种方案超声波测距HC-SR04通过发射超声波并接收回波计算时间差得到距离。如果车位上方安装车辆进入后距离会显著减小。优点非接触式不受光线影响成本低模块成熟。缺点检测区域是锥形可能受相邻车位或立柱干扰需要一定的安装高度和角度。红外对射在车位入口处地面和对应高度安装一对红外发射和接收管车辆驶入会阻断红外线。优点原理简单判断直接。缺点安装需要精准对位易受灰尘、杂物遮挡且只能检测“通过”无法判断车辆是否完全停入或已离开。地磁传感器检测车辆金属物体对地球磁场的扰动。优点安装在地下美观且不受天气影响功耗可以做到很低。缺点成本相对较高调试复杂需要标定基准磁场且对安装环境的地磁场稳定性有要求。压力传感器或地感线圈常用于正式停车场闸机。优点检测非常准确。缺点安装工程量大成本高不适合我们这种可移动、演示性的项目。综合成本、实现难度和可靠性我们选择了超声波方案。它为每个车位提供一个模拟的“距离”信息更接近真实的物理感知也让我们有机会去处理一些实际应用中的问题比如如何设置合理的阈值、如何滤波抗干扰等。2.3 系统架构设计确定了核心器件整个系统的框图就清晰了。我们设计的是一个“分布式检测集中式处理显示”的架构。检测节点每个车位一个包含一个STM32或更简单的单片机如STM8甚至直接用HC-SR04模块但为了统一和扩展性我们用了STM32最小系统和超声波传感器。节点负责周期性地测量距离并通过无线模块如nRF24L01或有线方式如RS485总线将数据发送给主控。我们当时为了简化用了有线模拟实际上就是杜邦线连接但程序架构预留了无线接口。中央处理单元主控一块STM32F103核心板。它负责接收所有检测节点发来的数据根据预设的距离阈值判断每个车位的状态空闲/占用并刷新显示。显示单元我们选用了一块0.96寸的OLED屏SSD1306驱动I2C接口。它体积小、功耗低、显示清晰非常适合用来显示一个简化的停车场网格图用不同的图标或颜色表示车位状态。通信链路可选扩展如果要做多车位、远距离无线方案是必须的。nRF24L01 2.4G模块是个经典选择点对点或组网都相对容易。如果想接入网络可以换用ESP8266 Wi-Fi模块让主控将数据发送到服务器或手机APP。整个系统的数据流是传感器采集 - 节点MCU处理/发送 - 主控MCU接收/判断 - 显示屏刷新。3. 硬件电路设计与核心模块解析硬件是系统的骨架设计不合理软件写得再好也白搭。这里重点讲几个关键部分的电路设计要点。3.1 STM32最小系统电路这是整个项目的基础。STM32F103C8T6最小系统必须包含以下几部分电源电路芯片工作电压是3.3V。如果使用USB供电5V需要一个AMS1117-3.3或类似的LDO稳压芯片将5V转为3.3V。输入和输出端记得接上10uF和0.1uF的电容进行滤波确保电源稳定。复位电路一个10K电阻上拉到3.3V一个0.1uF电容接地构成经典的RC复位电路。手动复位按钮并联在电容两端。时钟电路外部高速时钟HSE通常接8MHz晶振两端对地接20pF负载电容。内部PLL会将它倍频到72MHz。虽然芯片有内部RC振荡器但为了串口通信等需要精确时钟的外设强烈建议使用外部晶振。启动模式选择BOOT0和BOOT1引脚通过跳线帽选择启动模式。通常运行时BOOT0接低电平GND从主Flash启动下载程序时可能需要将BOOT0接高电平3.3V进入串口下载模式。调试下载接口预留SWD接口SWDIO, SWCLK, GND, 3.3V用于连接ST-Link进行程序下载和调试。这比传统的JTAG接口占用引脚少是首选。注意在绘制PCB或焊接面包板时务必确保电源和地线走线足够粗并且在芯片的每个电源引脚VDD/VSS附近都放置一个0.1uF的去耦电容且尽量靠近引脚。这是保证单片机稳定运行、避免莫名复位或异常的关键。3.2 超声波传感器HC-SR04接口电路HC-SR04模块工作电压为5V而STM32的GPIO是3.3V电平。直接连接存在电平不匹配和电流倒灌的风险。触发信号TrigSTM32输出3.3V信号给HC-SR04。虽然模块要求5V但实测3.3V的TTL高电平通常也能被识别为了简化可以尝试直连。如果担心可以加一个简单的电平转换电路如使用MOS管2N7002或三极管8050搭建单向电平抬升电路。回波信号EchoHC-SR04输出5V信号给STM32。这是危险区域绝对不能将5V直接接到STM32的GPIO上会烧坏IO口必须进行电平降压。有两种安全方法电阻分压最简单的方案。用两个电阻串联如1kΩ和2kΩ将5V分压到约3.3V5V * (2k/(1k2k)) ≈ 3.33V。将Echo信号接在1k电阻和2k电阻之间分压点接到STM32的IO口。注意分压电路会影响信号边沿速度但对于超声波这种微秒级的信号只要电阻值不是特别大建议总阻值在10kΩ以内影响可以接受。使用电平转换芯片更专业的做法是使用专用的双向电平转换器如TXB01044通道。这种方法成本稍高但信号质量最好。我们当时为了快速验证采用了电阻分压方案实测在1-2米测距范围内非常稳定。3.3 OLED显示模块连接0.96寸OLEDSSD1306通常支持I2C和SPI两种接口。I2C只需2根数据线SCL, SDA节省IO口我们优先选用。硬件连接将OLED模块的VCC接3.3VGND接GNDSCL接STM32的PB6或其它配置为I2C1_SCL的引脚SDA接PB7或I2C1_SDA。注意I2C总线需要上拉电阻通常模块内部已经集成如果没有则需要在SCL和SDA线上各接一个4.7kΩ电阻上拉到3.3V。软件地址SSD1306的I2C地址通常是0x78写地址或0x79读地址具体看模块手册。3.4 电源管理与抗干扰设计当系统包含多个传感器和模块时电源噪声和干扰会成为大问题。独立供电如果条件允许给STM32核心板和传感器模块分别供电或者使用磁珠、0欧电阻进行电源隔离。增加滤波电容在每个模块的电源入口处并联一个10uF的电解电容滤低频和一个0.1uF的陶瓷电容滤高频。信号线保护对于较长的信号线如超声波模块连接线可以串联一个几十欧姆的电阻有助于抑制信号振铃。同时确保所有地线GND良好连接形成完整的地平面。4. 软件设计与关键代码实现硬件搭好了接下来就是让系统“活”起来的软件部分。我们使用Keil MDK开发环境基于STM32标准库进行开发。程序采用前后台超级循环架构对于这个项目来说足够清晰高效。4.1 工程结构与驱动层首先建立清晰的工程文件夹结构/USER存放main.c等用户代码/CORE存放启动文件等/FWLIB存放STM32标准库文件/HARDWARE存放各硬件模块的驱动代码/SYSTEM存放延时、串口打印等系统代码。驱动层是我们首先要实现的超声波驱动hc_sr04.c/h核心是精确测量Echo引脚的高电平持续时间。我们使用STM32的输入捕获功能来实现。初始化一个定时器如TIM2将其时钟源设置为内部时钟分频后得到1MHz的计数频率即每个计数代表1微秒。将Echo引脚配置为定时器的输入捕获通道设置为上升沿和下降沿都触发捕获。在中断服务函数中当发生上升沿捕获时记录当前计数器的值TIM2-CCR1到变量ticks_start当发生下降沿捕获时记录值到ticks_end。高电平持续时间duration_us ticks_end - ticks_start。根据声速约340m/s距离distance_cm (duration_us / 2) * 0.0343。除以2是因为声音走了来回两倍路程。提供一个HCSR04_GetDistance()函数它先给Trig引脚一个至少10us的高电平脉冲然后启动定时器并等待测量完成返回计算出的距离值。// 示例代码片段超声波测距核心计算在输入捕获中断中 if (捕获到上升沿) { rising_time TIM2-CCR1; // 记录上升沿时刻 __HAL_TIM_SET_CAPTUREPOLARITY(htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING); // 改为捕获下降沿 } else if (捕获到下降沿) { falling_time TIM2-CCR1; // 记录下降沿时刻 distance_cm (falling_time - rising_time) * 0.0343 / 2.0; // 计算距离 measurement_done_flag 1; // 设置测量完成标志 __HAL_TIM_SET_CAPTUREPOLARITY(htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING); // 改回捕获上升沿准备下一次 }OLED显示驱动oled.c/h移植或编写SSD1306的驱动函数。主要包括初始化OLED_Init()、清屏OLED_Clear()、设置光标OLED_Set_Pos()、显示字符OLED_ShowChar()、显示字符串OLED_ShowString()、显示汉字OLED_ShowCHinese()以及显示位图OLED_DrawBMP()。网上有大量成熟的驱动代码注意根据自己使用的I2C引脚修改OLED_WR_Byte()函数底层的I2C_WriteByte()实现。4.2 主程序逻辑与状态判断主程序main.c中的超级循环负责调度所有任务。int main(void) { // 系统初始化 System_Init(); // 时钟、延时、中断优先级配置 HCSR04_Init(); // 超声波模块初始化 OLED_Init(); // OLED初始化 OLED_Clear(); // 显示静态界面如停车场标题、边框等 OLED_ShowString(0, 0, Parking Lot, 16); Draw_Parking_Layout(); // 绘制车位网格 while(1) { // 任务1循环检测各个车位 for(int slot_id 0; slot_id TOTAL_SLOTS; slot_id) { float dist HCSR04_GetDistance(slot_id); // 获取指定车位的距离 // 任务2状态判断算法 Slot_Status status Judge_Slot_Status(dist, slot_id); // 更新全局状态数组 g_slot_status[slot_id] status; // 任务3刷新显示 Update_Display(slot_id, status); } // 可以添加一个延时控制检测频率比如每500ms扫描一轮 delay_ms(500); } }状态判断算法Judge_Slot_Status()是核心逻辑。不能简单用一个固定阈值比如30cm因为传感器有误差且不同车位安装高度可能略有差异。我们采用了一种“滞回比较”算法类似于施密特触发器可以有效防止在阈值附近状态频繁跳变。#define DIST_THRESHOLD_FREE 50.0 // 距离大于50cm倾向于判断为空闲 #define DIST_THRESHOLD_OCCUP 30.0 // 距离小于30cm倾向于判断为占用 // 滞回区间30cm ~ 50cm在此区间内保持上一个状态 Slot_Status Judge_Slot_Status(float current_dist, uint8_t slot_id) { static Slot_Status last_status[TOTAL_SLOTS] {FREE}; // 记录每个车位上一次状态 Slot_Status new_status; if(current_dist DIST_THRESHOLD_FREE) { new_status FREE; } else if (current_dist DIST_THRESHOLD_OCCUP) { new_status OCCUPIED; } else { // 处于滞回区间保持原状态不变 new_status last_status[slot_id]; } last_status[slot_id] new_status; return new_status; }同时为了应对单次测量可能出现的偶然误差比如小虫子飞过可以加入软件滤波。例如采用滑动平均滤波连续采样N次如5次去掉最大最小值后求平均再用这个平均值去判断状态。4.3 多车位数据管理与通信模拟我们当时只做了一个车位的实物但软件架构是按照多车位设计的。在程序中用一个全局数组g_slot_status[]来管理所有车位的状态。对于多个超声波传感器可以通过不同的定时器通道或者分时复用同一个定时器配合GPIO切换来测量。如果要做多节点无线通信这里就需要实现一个简单的通信协议。例如每个检测节点有一个唯一ID它周期性地将[ID, Distance]数据打包通过nRF24L01发送。主控节点接收后根据ID更新对应车位的状态。协议帧可以设计为帧头0xAA 0x55 节点ID1字节 距离数据2字节 校验和1字节。4.4 显示界面设计在有限的OLED屏幕上清晰展示信息需要巧思。我们设计了一个简单的图形化界面顶部区域显示标题“智能停车场”和总车位/空车位数量。中部主区域用矩形框模拟车位排列成网格状如3x3。每个矩形框内如果状态为空闲则绘制一个绿色的“P”字母或打勾图标如果状态为占用则绘制一个红色的“X”或汽车图标。底部区域可以滚动显示提示信息如“A01车位已占用”。Update_Display()函数根据g_slot_status[]数组的内容只刷新发生状态变化的那个车位图标而不是全屏刷新以提高效率。5. 调试过程、常见问题与解决方案实际做项目调试时间往往比开发时间还长。下面是我在开发过程中遇到的一些典型问题及解决方法。5.1 硬件连接与电源问题问题现象STM32程序下载不进去或者下载后不运行。排查首先检查BOOT0和BOOT1的跳线帽是否在正确位置运行模式BOOT00 BOOT10。然后检查SWD接口SWDIO SWCLK是否连接正确、接触良好。最后用万用表测量3.3V和GND之间的电压是否稳定在3.3V左右。解决确保最小系统电路正确特别是复位电路和晶振电路。如果使用杜邦线连接线太长或接触不良会导致各种诡异问题尽量使连接紧凑。问题现象超声波模块测量距离不准或者完全没反应。排查用示波器观察Trig和Echo引脚波形是最直接的方法。没有示波器的话可以先用代码在Trig引脚发送脉冲后将Echo引脚的状态通过另一个GPIO点亮LED来粗略判断。同时检查电平转换电路是否正确。解决确保给HC-SR04的VCC供了5V电。检查Echo引脚到STM32的线路是否接了分压电阻。测量时传感器正前方要对准平坦的障碍物避免角度倾斜或对着柔软、复杂的表面。5.2 软件编程与驱动问题问题现象OLED屏幕不显示或显示乱码。排查首先用逻辑分析仪或示波器抓取I2C总线上的SCL和SDA波形看是否有数据发出。如果没有工具可以编写一个简单的测试程序只发送一个初始化命令序列然后测量I2C引脚电压是否有变化。解决确认I2C的GPIO引脚配置是否正确开漏输出、使能上拉。确认OLED模块的I2C地址0x78或0x3C取决于模块。检查初始化序列是否完整很多OLED模块需要先执行一次OLED_Init()里的完整初始化命令才能正常工作。问题现象超声波测距值跳动很大。排查这是最常见的问题。可能是电源噪声、环境干扰或软件测量误差。解决硬件滤波在HC-SR04的VCC和GND之间并联一个100uF的电解电容可以有效平滑供电。软件滤波实现前文提到的滑动平均滤波或中值滤波。这是提升数据稳定性的最有效手段。环境因素超声波在空气中传播受温度影响较大公式中的声速可以加入温度补偿V 331.4 0.6 * TT为摄氏温度。如果要求高精度可以增加一个温度传感器如DS18B20。测量超时处理在等待Echo高电平的函数里一定要加超时退出机制防止因为没收到回波而程序卡死。问题现象车位状态在临界距离附近频繁跳变一会儿有车一会儿没车。解决这就是我们采用“滞回比较”算法的原因。适当拉大DIST_THRESHOLD_FREE和DIST_THRESHOLD_OCCUP之间的差值滞回区间可以彻底解决这个问题。5.3 系统集成与稳定性问题问题现象当所有模块一起工作时系统偶尔会死机或复位。排查这通常是电源带载能力不足或瞬间电流冲击导致的。观察在超声波模块发射瞬间Trig触发时电源电压是否有明显跌落。解决升级电源方案使用输出电流更大的LDO或DC-DC模块如LM2596。在各个模块的电源入口处增加更大的储能电容如100uF。检查程序中的中断服务函数是否处理时间过长或者有重复进入中断的情况优化中断服务程序只做最必要的标志位设置数据处理放到主循环。5.4 功能扩展与优化思路在基本功能实现后可以考虑以下扩展让项目更出彩无线组网将每个车位检测节点替换为STM32 nRF24L01 超声波模块的组合实现真正的分布式无线检测。需要设计TDMA时分多址或CSMA载波侦听协议来避免无线数据冲突。数据上传与可视化在主控端增加一个ESP8266 Wi-Fi模块通过MQTT或HTTP协议将车位数据上传到云平台如阿里云、OneNET或自己搭建的服务器。然后可以开发一个简单的网页或手机APP实时查看停车场空位情况。车牌识别联动高级在停车场入口和每个车位增加一个摄像头模块如OpenMV或树莓派结合机器学习算法进行车牌识别。系统可以记录车辆进入时间、停放位置实现自动计时收费和反向寻车功能。这已经是一个完整的商业停车场系统雏形了。低功耗设计如果检测节点采用电池供电需要做低功耗优化。让STM32大部分时间处于睡眠模式Stop模式定时唤醒通过RTC进行测量和发送发送完毕继续睡眠。这样可以大大延长电池寿命。做这个项目最大的体会是嵌入式开发是一个系统工程硬件和软件密不可分。原理图上的一个滤波电容、程序里的一个超时判断都可能成为系统稳定性的关键。从最基础的GPIO点灯到复杂的定时器输入捕获、I2C通信、状态机逻辑一步步调试成功的过程就是能力提升最快的时候。遇到问题善用调试工具串口打印、LED指示灯、逻辑分析仪和搜索引擎但更重要的是学会自己分析数据手册和原理图。最后把代码写得清晰、模块化加上足够的注释不仅是为了通过答辩将来自己回头看或者和别人交流时都会轻松很多。这个项目做完你对一个完整的嵌入式产品开发流程就有了一个非常扎实的切身体验。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

超越二维码容错极限:基于纠删码的碎片化数据恢复方案 2026/9/4 7:02:54

超越二维码容错极限:基于纠删码的碎片化数据恢复方案

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

阅读更多 →
MATLAB船舶水动力建模:势流面元法与六自由度仿真工具集 2026/9/4 7:02:54

MATLAB船舶水动力建模:势流面元法与六自由度仿真工具集

简介:本资源是一个面向船舶工程专业学生、科研人员及MATLAB初学者的船舶建模与仿真系统,聚焦于航海器动力学建模、航行特性分析与控制系统仿真,解决船舶六自由度运动建模、流体响应模拟及多类型舰船(如油轮、驱逐舰、ROV、DSRV、补…

阅读更多 →
223基于SpringBoot4+Vue3的家具交易Web商城、家具电商平台、家具Web在线商城、在线家具销售系统、家具电商系统、家具商城系统;毕业设计、课程设计 2026/9/4 7:02:54

223基于SpringBoot4+Vue3的家具交易Web商城、家具电商平台、家具Web在线商城、在线家具销售系统、家具电商系统、家具商城系统;毕业设计、课程设计

✅博主简介:Java全栈开发工程师(bishecoder),精通Java开发、系统设计、项目实战。 ✅技术栈:SpringBoot、Vue、React、Node.js、Nest.js、uni-app等 ✅技术擅长:定制项目、修改代码、编写文档、技术指导等。…

阅读更多 →
Excel的“隐身术“:4个让数据藏得恰到好处的技巧 2026/9/4 7:02:54

Excel的“隐身术“:4个让数据藏得恰到好处的技巧

你知道Excel自带了一些隐藏功能吗? 表格中多余的辅助列、临时数据、后台公式、备用内容等堆积在一起,很容易使页面变得杂乱无章,并且会影响到观感以及汇报的效果。 Excel中的隐藏功能并不是简单的把东西藏起来,而是在保证页面整…

阅读更多 →
思维链成本失控?用记忆增强压缩在大模型推理中降本增效 2026/9/4 7:02:54

思维链成本失控?用记忆增强压缩在大模型推理中降本增效

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

阅读更多 →
MATLAB非线性回归实战:从模型选型到参数估计与结果诊断 2026/9/4 6:59:54

MATLAB非线性回归实战:从模型选型到参数估计与结果诊断

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞