news 2026/9/4 6:23:46

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于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,也就是常说的“蓝桥杯”或“最小系统板”核心芯片。理由很充分:

  1. 性能与资源:基于ARM Cortex-M3内核,主频72MHz,远超传统的8位单片机。这意味着它有足够的算力来处理多个传感器的数据、运行状态判断逻辑以及驱动显示模块。其内置的Flash和SRAM也足够存放我们的程序和变量。
  2. 丰富的外设:STM32F103系列拥有多个USART(串口)、SPI、I2C、ADC和定时器。这为我们连接传感器(可能需要ADC或定时器)、驱动显示屏(通常用I2C或SPI)、以及可能的无线模块(如ESP8266,通过串口AT指令通信)提供了极大的灵活性。
  3. 开发生态与成本:STM32拥有非常完善的生态系统,官方提供的标准库(Standard Peripheral Library)和后来主流的HAL库(Hardware Abstraction Layer)大大降低了开发门槛。配套的IDE(如Keil MDK、STM32CubeIDE)和调试工具(ST-Link)也成熟易用。最关键的是,这款芯片及其核心板价格非常亲民,非常适合学生项目。
  4. 学习价值:STM32在工业界应用极广,通过这个项目熟练掌握STM32开发,对后续求职或深造都很有帮助。

2.2 车位检测方案对比与选择

如何检测车位上有无车辆?这是项目的核心传感部分。我们当时主要评估了以下几种方案:

  • 超声波测距(HC-SR04):通过发射超声波并接收回波,计算时间差得到距离。如果车位上方安装,车辆进入后距离会显著减小。优点:非接触式,不受光线影响,成本低,模块成熟。缺点:检测区域是锥形,可能受相邻车位或立柱干扰;需要一定的安装高度和角度。
  • 红外对射:在车位入口处地面和对应高度安装一对红外发射和接收管,车辆驶入会阻断红外线。优点:原理简单,判断直接。缺点:安装需要精准对位,易受灰尘、杂物遮挡,且只能检测“通过”,无法判断车辆是否完全停入或已离开。
  • 地磁传感器:检测车辆(金属物体)对地球磁场的扰动。优点:安装在地下,美观且不受天气影响,功耗可以做到很低。缺点:成本相对较高,调试复杂(需要标定基准磁场),且对安装环境的地磁场稳定性有要求。
  • 压力传感器或地感线圈:常用于正式停车场闸机。优点:检测非常准确。缺点:安装工程量大,成本高,不适合我们这种可移动、演示性的项目。

综合成本、实现难度和可靠性,我们选择了超声波方案。它为每个车位提供一个模拟的“距离”信息,更接近真实的物理感知,也让我们有机会去处理一些实际应用中的问题,比如如何设置合理的阈值、如何滤波抗干扰等。

2.3 系统架构设计

确定了核心器件,整个系统的框图就清晰了。我们设计的是一个“分布式检测,集中式处理显示”的架构。

  1. 检测节点:每个车位一个,包含一个STM32(或更简单的单片机如STM8,甚至直接用HC-SR04模块,但为了统一和扩展性,我们用了STM32最小系统)和超声波传感器。节点负责周期性地测量距离,并通过无线模块(如nRF24L01)或有线方式(如RS485总线)将数据发送给主控。我们当时为了简化,用了有线模拟(实际上就是杜邦线连接),但程序架构预留了无线接口。
  2. 中央处理单元(主控):一块STM32F103核心板。它负责接收所有检测节点发来的数据,根据预设的距离阈值判断每个车位的状态(空闲/占用),并刷新显示。
  3. 显示单元:我们选用了一块0.96寸的OLED屏(SSD1306驱动,I2C接口)。它体积小、功耗低、显示清晰,非常适合用来显示一个简化的停车场网格图,用不同的图标或颜色表示车位状态。
  4. 通信链路(可选扩展):如果要做多车位、远距离,无线方案是必须的。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电平。直接连接存在电平不匹配和电流倒灌的风险。

  • 触发信号(Trig):STM32输出3.3V信号给HC-SR04。虽然模块要求5V,但实测3.3V的TTL高电平通常也能被识别,为了简化可以尝试直连。如果担心,可以加一个简单的电平转换电路,如使用MOS管(2N7002)或三极管(8050)搭建单向电平抬升电路。
  • 回波信号(Echo):HC-SR04输出5V信号给STM32。这是危险区域!绝对不能将5V直接接到STM32的GPIO上,会烧坏IO口!必须进行电平降压。有两种安全方法:
    1. 电阻分压:最简单的方案。用两个电阻串联(如1kΩ和2kΩ),将5V分压到约3.3V(5V * (2k/(1k+2k)) ≈ 3.33V)。将Echo信号接在1k电阻和2k电阻之间,分压点接到STM32的IO口。注意分压电路会影响信号边沿速度,但对于超声波这种微秒级的信号,只要电阻值不是特别大(建议总阻值在10kΩ以内),影响可以接受。
    2. 使用电平转换芯片:更专业的做法是使用专用的双向电平转换器,如TXB0104(4通道)。这种方法成本稍高,但信号质量最好。

我们当时为了快速验证,采用了电阻分压方案,实测在1-2米测距范围内非常稳定。

3.3 OLED显示模块连接

0.96寸OLED(SSD1306)通常支持I2C和SPI两种接口。I2C只需2根数据线(SCL, SDA),节省IO口,我们优先选用。

  • 硬件连接:将OLED模块的VCC接3.3V,GND接GND,SCL接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的输入捕获功能来实现。
    1. 初始化一个定时器(如TIM2),将其时钟源设置为内部时钟,分频后得到1MHz的计数频率(即每个计数代表1微秒)。
    2. 将Echo引脚配置为定时器的输入捕获通道,设置为上升沿和下降沿都触发捕获。
    3. 在中断服务函数中,当发生上升沿捕获时,记录当前计数器的值TIM2->CCR1到变量ticks_start;当发生下降沿捕获时,记录值到ticks_end
    4. 高电平持续时间duration_us = ticks_end - ticks_start。根据声速(约340m/s),距离distance_cm = (duration_us / 2) * 0.0343。除以2是因为声音走了来回两倍路程。
    5. 提供一个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) + 节点ID(1字节) + 距离数据(2字节) + 校验和(1字节)

4.4 显示界面设计

在有限的OLED屏幕上清晰展示信息需要巧思。我们设计了一个简单的图形化界面:

  1. 顶部区域:显示标题“智能停车场”和总车位/空车位数量。
  2. 中部主区域:用矩形框模拟车位,排列成网格状(如3x3)。每个矩形框内,如果状态为空闲,则绘制一个绿色的“P”字母或打勾图标;如果状态为占用,则绘制一个红色的“X”或汽车图标。
  3. 底部区域:可以滚动显示提示信息,如“A01车位已占用”。

Update_Display()函数根据g_slot_status[]数组的内容,只刷新发生状态变化的那个车位图标,而不是全屏刷新,以提高效率。

5. 调试过程、常见问题与解决方案

实际做项目,调试时间往往比开发时间还长。下面是我在开发过程中遇到的一些典型问题及解决方法。

5.1 硬件连接与电源问题

  • 问题现象:STM32程序下载不进去,或者下载后不运行。

    • 排查:首先检查BOOT0和BOOT1的跳线帽是否在正确位置(运行模式:BOOT0=0, BOOT1=0)。然后检查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()里的完整初始化命令才能正常工作。
  • 问题现象:超声波测距值跳动很大。

    • 排查:这是最常见的问题。可能是电源噪声、环境干扰或软件测量误差。
    • 解决
      1. 硬件滤波:在HC-SR04的VCC和GND之间并联一个100uF的电解电容,可以有效平滑供电。
      2. 软件滤波:实现前文提到的滑动平均滤波或中值滤波。这是提升数据稳定性的最有效手段。
      3. 环境因素:超声波在空气中传播受温度影响较大,公式中的声速可以加入温度补偿:V = 331.4 + 0.6 * T(T为摄氏温度)。如果要求高精度,可以增加一个温度传感器(如DS18B20)。
      4. 测量超时处理:在等待Echo高电平的函数里一定要加超时退出机制,防止因为没收到回波而程序卡死。
  • 问题现象:车位状态在临界距离附近频繁跳变(一会儿有车一会儿没车)。

    • 解决:这就是我们采用“滞回比较”算法的原因。适当拉大DIST_THRESHOLD_FREEDIST_THRESHOLD_OCCUP之间的差值(滞回区间),可以彻底解决这个问题。

5.3 系统集成与稳定性问题

  • 问题现象:当所有模块一起工作时,系统偶尔会死机或复位。
    • 排查:这通常是电源带载能力不足或瞬间电流冲击导致的。观察在超声波模块发射瞬间(Trig触发时),电源电压是否有明显跌落。
    • 解决:升级电源方案,使用输出电流更大的LDO或DC-DC模块(如LM2596)。在各个模块的电源入口处增加更大的储能电容(如100uF)。检查程序中的中断服务函数,是否处理时间过长,或者有重复进入中断的情况,优化中断服务程序,只做最必要的标志位设置,数据处理放到主循环。

5.4 功能扩展与优化思路

在基本功能实现后,可以考虑以下扩展,让项目更出彩:

  1. 无线组网:将每个车位检测节点替换为STM32 + nRF24L01 + 超声波模块的组合,实现真正的分布式无线检测。需要设计TDMA(时分多址)或CSMA(载波侦听)协议来避免无线数据冲突。
  2. 数据上传与可视化:在主控端增加一个ESP8266 Wi-Fi模块,通过MQTT或HTTP协议将车位数据上传到云平台(如阿里云、OneNET)或自己搭建的服务器。然后可以开发一个简单的网页或手机APP,实时查看停车场空位情况。
  3. 车牌识别联动(高级):在停车场入口和每个车位增加一个摄像头模块(如OpenMV或树莓派),结合机器学习算法进行车牌识别。系统可以记录车辆进入时间、停放位置,实现自动计时收费和反向寻车功能。这已经是一个完整的商业停车场系统雏形了。
  4. 低功耗设计:如果检测节点采用电池供电,需要做低功耗优化。让STM32大部分时间处于睡眠模式(Stop模式),定时唤醒(通过RTC)进行测量和发送,发送完毕继续睡眠。这样可以大大延长电池寿命。

做这个项目最大的体会是,嵌入式开发是一个系统工程,硬件和软件密不可分。原理图上的一个滤波电容、程序里的一个超时判断,都可能成为系统稳定性的关键。从最基础的GPIO点灯,到复杂的定时器输入捕获、I2C通信、状态机逻辑,一步步调试成功的过程,就是能力提升最快的时候。遇到问题,善用调试工具(串口打印、LED指示灯、逻辑分析仪)和搜索引擎,但更重要的是学会自己分析数据手册和原理图。最后,把代码写得清晰、模块化,加上足够的注释,不仅是为了通过答辩,将来自己回头看,或者和别人交流时,都会轻松很多。这个项目做完,你对一个完整的嵌入式产品开发流程,就有了一个非常扎实的切身体验。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 6:21:27

DWFToolkit-7.7源码解析:轻量级工程图纸DWF格式集成与STM32开发实践

简介&#xff1a;DWFToolkit-7.7-src 是 Autodesk 官方发布的开源 DWF 开发库源码包&#xff0c;面向建筑、工程与制造领域的 C 开发者&#xff0c;用于在自有应用中集成 DWF 文件的查看、转换、测量、图层控制及安全管控能力。资源为 ZIP 压缩包&#xff0c;大小 32.5MB&#…

作者头像 李华
网站建设 2026/9/4 6:20:54

kkce.com:网站测速与冷热请求对照

网站测速 的关键变量不是"加载了几秒"&#xff0c;而是冷请求与热请求的耗时差。浏览器本地刷新走 TLS 会话复用、TCP 连接复用、DNS 缓存命中&#xff0c;测出来的是"第 N 次访问"&#xff1b;真实用户第一次进来是冷启动&#xff1a;清 DNS 缓存、TCP 三…

作者头像 李华
网站建设 2026/9/4 6:20:51

python reload 别再傻傻重启Nginx了!90%的502、504报错,根源在后端

一、运维踩坑存在着高达90%的致命误区, 其中Nginx报错, 实际上根本不是服务器方面的问题。有这样一种离谱场景, 众多后端运维人员以及开发人员都曾碰到过, 那就是服务器处于正常运行状态, Nginx服务状态同样正常, 程序进程也未出现挂掉的情况, 内存以及CPU使用率都很充足, 然而…

作者头像 李华
网站建设 2026/9/4 6:20:46

JavaWeb学生成绩管理系统:从Servlet/JSP到MVC架构的完整实战指南

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

作者头像 李华
网站建设 2026/9/4 6:19:21

Delphi 12.3 TeeChart Pro完整源码集成与高级应用实战指南

简介&#xff1a;本资源是专为Delphi 12.3&#xff08;Athens&#xff09;开发者定制的TeeChart Pro VCL & FMX v2023.38全源码控件包&#xff0c;面向Windows桌面及跨平台&#xff08;macOS、Android、iOS&#xff09;应用开发人员&#xff0c;解决高级数据可视化集成难题…

作者头像 李华