首页/新闻资讯/正文详情

STM32超声波测距开源项目评测:原理图、代码与仿真全解析

发布时间:2026/9/25 1:03:32 来源:云帆数科 栏目:资讯中心
STM32超声波测距开源项目评测:原理图、代码与仿真全解析
拿到一个打包完整的STM32开源项目时我习惯先看三样东西目录结构、原理图风格、代码注释。因为这三样基本能判断项目作者是在认真做东西还是在给毕业设计凑数。我最近在硬件交流群里看到有人分享一个STM32开源项目压缩包里代码、原理图、仿真三件套一次给齐。这种打包方式在STM32开源项目里并不少见但很多“三件套”其实是PPT式开源——原理图是局部截图仿真跑不通代码一编译全是警告。所以我决定认真做一次评测把代码、原理图、仿真逐个拆开看记录真实上手过程中的收获和踩坑给准备做STM32项目或者拿开源项目做二次开发的朋友一份可参考的评估样本。先交代一下项目背景这是基于STM32F103C8T6的超声波测距小项目搭配HC-SR04模块、OLED显示屏和串口打印功能主线是测距、显示、上位机调试三大块。对于正在做STM32入门、嵌入式课程设计或毕设前期参考的人来说这种“麻雀虽小五脏俱全”的项目反而训练价值最高外设用到了GPIO、定时器输入捕获、I2C、USART编译环境是Keil MDK5 STM32CubeMX生成属于目前最主流的技术栈。接下来按实际评测顺序往下写。1. 开源STM32项目到手先看什么1.1 目录结构暴露了作者的习惯解压压缩包之后我第一件事是打开目录树。一个好的STM32工程目录结构天然就是分层的STM32CubeMX生成的部分和用户自写的部分必须分开。这个项目的目录是这样的STM32_HC-SR04_Eval/ ├── Doc/ │ ├── STM32F103C8T6_Eval.pdf │ ├── STM32_HC-SR04_Eval.pdsprj │ └── README.md ├── Core/ │ ├── Inc/ │ │ └── main.h │ └── Src/ │ └── main.c ├── Drivers/ │ ├── CMSIS/ │ └── STM32F1xx_HAL_Driver/ ├── Hardware/ │ ├── hc_sr04.c / hc_sr04.h │ ├── oled.c / oled.h │ └── uart_dbg.c / uart_dbg.h └── MDK-ARM/ ├── project.uvprojx └── ...这结构一出来基本就能给作者加印象分。Core和Drivers是CubeMX生成的固定框架Hardware是手写驱动目录Doc里放了PDF原理图、Proteus仿真文件和一个README。在这里我要专门提一下README太多STM32开源项目不做文档压缩包里就是一堆.c和.h连接线表都没有。这个项目的README里写了HC-SR04怎么接线、OLED地址是0x3C、串口波特率是115200别小看这几行字它决定了你拿到项目后是10分钟跑通还是花两小时反推电路。1.2 工程分层CubeMX生成的底子加手写的外设驱动现在很多人写STM32代码存在一个误区把CubeMX生成的代码跟自己写的代码全部混在一起最后main.c写了一千多行。这个项目的做法是让CubeMX只做“板级初始化”的活儿时钟树、GPIO复用、外设句柄初始化这些放在main.c里而用户业务逻辑全部收进Hardware文件夹每个外设一个.c/.h对。这个设计思路值得照抄几个好处立竿见影第一CubeMX重新生成代码时不会把你的手写驱动覆盖掉。CubeMX的生成规则是“只管理自己生成的部分”用户文件放在Hardware下即使重新配置引脚也不会动到。第二换平台迁移时只动Hardware层。比如把HC-SR04从PA0换到PB0你只需要改hc_sr04.c里的引脚定义或初始化函数完全不碰上层逻辑。第三代码可读性极大提升。别人看你的开源项目第一眼就知道去哪找超声波驱动、去哪找OLED驱动。我插一句个人经验拿到任何开源STM32项目不要急着点编译。先数一下Hardware或者User文件夹里有没有独立的驱动文件如果所有外设代码都堆在main.c里这个项目以后维护成本会非常高除非你只是想烧录看个现象否则不建议在这种代码上二次开发。1.3 硬件选型为什么是STM32F103而不是更“高级”的芯片主控用的是STM32F103C8T6LQFP48封装64KB Flash、20KB SRAM72MHz主频。这颗芯片在开源项目里属于“万金油”选它有三个非常现实的原因。价格是首要因素拆机片几块钱全新片也就十块上下板子做错了不心疼。其次社区资料密度极高网上搜“STM32F103C8T6最小系统”能出来一堆原理图和PCB参考遇到问题不用翻几百页英文手册。第三是性能对这种测距小项目完全够用HC-SR04测距本质上就是测一个高电平脉冲宽度定时器输入捕获加上72MHz时钟理论分辨率能到微秒级OLED的I2C通信速率400kHz也毫无压力串口115200波特率打印数据CPU占用率可以忽略不计。有人会问既然用F103为什么不直接选国产替代芯片这就要说到开源项目的受众了。F103是国内绝大多数嵌入式课程的教材级芯片也是毕设题目的常客。开源项目默认的读者是学生和刚入行的工程师用STM32F103而不是GD32、MH1903这类国产型号能让最多的人不需要改代码就能直接跑起来。兼容性才是开源项目传播的第一要素。2. 原理图拆解电源、时钟、复位与接口设计为什么这样画2.1 供电与去耦3.3V稳压和100nF电容的位置讲究原理图PDF我放大看了很久。这个板子的供电路径很典型USB的5V进来经过SS34肖特基二极管做防反接再进AMS1117-3.3稳压器输出3.3V给STM32和其他外设供电。SS34的作用是防止USB线插反时反向电流灌进板子烧芯片很多DIY板子连这个二极管都省了短期看着没问题一旦接错线就“冒烟”省这个零件完全不值得。AMS1117-3.3是一款低压差线性稳压器输入5V、输出3.3V压差1.7V在它的正常工作范围内最大能输出1A左右电流。对这个项目来说负载只有ST芯片、OLED和HC-SR04总电流不超过100mA余量非常足。但注意AMS1117的输入和输出端都接了电容组合输入端10uF电解电容加100nF陶瓷电容输出端同样一套。10uF负责储能和低频滤波100nF负责滤除高频噪声。这是数据手册要求的标准电路抄就完了但得知道为什么。真正值得讲的是STM32每个电源引脚旁边的那颗100nF去耦电容。STM32内部逻辑翻转频率很高电流变化剧烈如果供电线路上没有就近的电荷储备电源电压会出现毛刺。100nF陶瓷电容高频特性好能瞬间提供局部电荷防止芯片工作不稳定。摆放原则是必须紧贴对应的VDD引脚走线越短越好这个在原理图上画得再对PCB布局拉跨也是白搭。我在这个项目原理图上看到每个VDD旁边都放了100nF说明作者至少有基本的EMC意识。2.2 晶振与启动配置8MHz、32.768kHz和BOOT0背后的计算MCU主时钟用的是8MHz无源晶振并联两个22pF负载电容。这个22pF不是随便选的晶振的负载电容计算有个经验公式CL (C1 × C2) / (C1 C2) Cs其中Cs是PCB走线和引脚引入的寄生电容一般取3到5pF。8MHz晶振常见的推荐负载电容是16pF到20pF如果C1、C2各取22pF并联后等效11pF加上4pF左右的寄生电容约15pF恰好落在推荐范围内。所以看到22pF这个值说明作者是按公式算过的而不是随手放的。板上还有一颗32.768kHz晶振这是给RTC用的。需要注意的是这个晶振在F103上如果不用RTC功能完全可以不焊。但原理图上保留它有个好处板子以后想加时钟功能就不用重新改板上件了。开源项目做“功能预留”是一种实用主义思维我也比较赞成。BOOT0引脚接了10k下拉电阻接地。STM32的启动模式由BOOT0和BOOT1两个引脚决定BOOT0为低时从Flash启动这是正常跑用户程序的状态BOOT0为高、BOOT1为低时从系统存储器启动也就是进入ISP下载模式。下拉10k保证上电时BOOT0是确定的低电平程序能稳定从Flash启动。别小看这个电阻如果悬空引脚电平受干扰抖动可能出现上电不运行程序这种“玄学”问题本质上都是硬件设计偷懒。2.3 SWD调试口与外围扩展接口的工程化做法板载调试接口是标准的SWD四针SWDIO、SWCLK、GND、3.3VST-Link直接插上就能烧录调试。相比JTAG的20针SWD只要4根线对这个小板子来说足够了。原理图上SWDIO接了10k上拉、SWCLK接了10k下拉这里稍微有点讲究SWDIO是双向数据线上拉是为了保证空闲状态的电平确定SWCLK默认内部有下拉外部再加一个10k下拉更保险。这两个电阻能提高下载的稳定性尤其是用杜邦线连接ST-Link时可以明显减少“No ST-LINK detected”的报错概率。外围接口最抢眼的是HC-SR04的四针接口VCC、Trig、Echo、GND。这里有一个非常容易踩的坑HC-SR04的Echo引脚输出的是5V高电平而STM32的GPIO耐压只有3.3V。如果用杜邦线直接怼短时间能工作长期会加速引脚老化甚至击穿。这个项目的原理图是怎么处理的在Echo信号线上加了一个电阻分压网络把5V降到3.3V左右再接PA0。我看到这个细节的时候确信作者是真的跑过实物不是纸上谈兵。OLED用的是I2C接口的四针排座VCC、GND、SCL、SDA。I2C总线需要上拉电阻原理图上在3.3V到SCL和SDA之间各接了一个4.7k上拉这是一个最常规、绝对不会出错的取值。4.7k在400kHz的I2C速率下能提供足够的上升沿斜率又不至于让灌电流过大选得很稳。2.4 关键参数速查表为了方便后来者我把这次拆原理图整理出的关键参数汇总成一张表直接对着检查板子就行模块参数/器件说明电源输入SS34 AMS1117-3.35V转3.3V带防反接去耦电容每VDD脚 100nF紧贴引脚摆放主晶振8MHz 2 × 22pF主时钟源RTC晶振32.768kHz可选预留功能复位NRST 10k上拉 按键接地RC复位启动配置BOOT0 10k下拉Flash启动调试接口SWDIO上拉、SWCLK下拉ST-Link直连超声波模块Trig推挽输出Echo分压输入5V转3.3VOLED4.7k上拉I2C地址0x3C串口CH340CUSB转TTL1152003. 代码质量评估模块化、测距逻辑与延时实现3.1 一个外设一个文件驱动文件如何划分Hardware文件夹里是hc_sr04.c、oled.c、uart_dbg.c三个驱动文件加对应的头文件。这种“一个外设一个文件”的划分方式是嵌入式代码最基本的模块化要求。我大概翻了下代码量hc_sr04.c大约120行oled.c由于驱动一个128x64的OLED屏、包含字库数量会大些但逻辑清晰uart_dbg.c则打包了printf重定向。这里有个很实用的做法串口调试模块把printf重定向到了USART1然后整个项目后续调试都用printf打印信息。作者在代码注释里说明在Keil里需要勾选“Use MicroLIB”否则ARM编译器默认的printf实现会占掉大量Flash。这也是初学STM32最容易忽略的点很多人printf一编译就报“undefined symbol”其实就是没有重定向fputc或者没有用MicroLIB。模块化编程的核心价值在什么地方我举一个实际场景如果你毕设打算把OLED从I2C屏换成SPI屏你只需要重写oled.c里的底层接口函数上层显示逻辑完全不用动。开源项目的代码如果做到了这一点二次开发的成本就非常低。在代码里我看到oled.c对外暴露的接口是OLED_Init()、OLED_Clear()、OLED_ShowString()这类函数接口命名清晰层次合理整体评价是“教科书级的驱动写法”。3.2 超声波测距的代码实现TRIG与ECHO的时序控制HC-SR04的测距原理不复杂但时序要求很严格。先给Trig引脚一个至少10us的高电平脉冲模块内部会发出8个40kHz的超声波脉冲然后Echo引脚会输出一个高电平高电平持续时间就是超声波从发射到返回的时间。距离计算公式是距离(cm) Echo高电平时间(us) / 58这个58怎么来的声速在空气中约340m/s也就是0.034cm/us超声波往返距离是实际距离的2倍所以实际距离340(m/s)×时间(s)/217000×时间(us)/1000000? 换算成常用形式时间(us)除以约58.2就是厘米。实操中大家直接记“t除以58就是厘米”完全够用。这个项目的代码用的是定时器输入捕获来测Echo高电平时间而不是很多教程里的阻塞式等待法。阻塞式写法简单但致命while循环死等Echo引脚变低期间CPU什么都干不了OLED刷新、串口打印全部卡住一旦Echo信号异常程序直接死循环。输入捕获的实现思路是把Echo接到TIM2_CH1配置输入捕获模式先捕获上升沿记录当前计数值作为起始时间再捕获下降沿记录结束时间两个计数值相减得到高电平持续了多少个计数周期。配合72MHz主频和分频器算出来后就是微秒数。这种方案的好处是CPU零等待测距的同时还能处理显示、通信任务这正是嵌入式实时性的核心价值。3.3 DWT微秒延时为什么不用HAL_Delay这个项目的代码里有一个细节让我注意了它没用HAL_Delay做10us的Trig触发延时而是自己写了一个DWT延时函数。原因很简单HAL_Delay的精度是毫秒级而HC-SR04要求Trig高电平至少10us差了三个数量级。虽然10us和1ms都能触发成功但错误地把延时写得过长会限制测距频率所以必须用微秒级延时。DWT是Cortex-M3内核里的一个调试观察点组件其中有一个周期计数器CYCCNT。它数的是内核时钟周期在72MHz主频下每个周期约13.8ns所以数72下就是1us。用它写延时函数只需要三步void DWT_Delay_Init(void) { CoreDebug-DEMCR | CoreDebug_DEMCR_TRCENA_Msk; DWT-CTRL | DWT_CTRL_CYCCNTENA_Msk; DWT-CYCCNT 0; } void DWT_Delay_us(uint32_t us) { uint32_t start DWT-CYCCNT; uint32_t ticks us * (SystemCoreClock / 1000000U); while (DWT-CYCCNT - start ticks); }这段代码的巧妙之处在于用减法比较而不是大于比较这样处理了计数器回绕的问题。写进项目后Trig触发延时10us测量周期控制在100ms左右OLED和串口的刷新都能稳定工作。如果你自己写代码强烈建议把这个DWT延时函数存进自己的代码库以后做DHT11、DS18B20这些单总线传感器全都要用微秒级延时。3.4 常见代码雷区GPIO初始化、中断优先级与volatile代码质量再高有些雷区是STM32开发者一定会踩的我在评测这个项目的过程中也顺手复盘了这几个点。GPIO初始化是最容易翻车的地方。HC-SR04的Trig引脚是输出必须配置为推挽输出模式Echo引脚是输入但因为用了外部硬件分压代码里配置成了浮空输入。这里要注意如果你没有外部分压电路而直接把Echo接到3.3V引脚光靠代码里配置下拉输入是救不了的还是得回到硬件层面解决电平匹配。所有外设的GPIO模式配置得先看懂原理图再写代码不能闭着眼配。中断优先级配置直接决定系统实时性。项目里TIM2输入捕获中断优先级被设成了比串口中断更高因为测距的脉宽测量一旦延迟读数误差是厘米级的而串口打印丢几个字符屏幕看不出来。这个排序思路是对的实时性要求越高的中断抢占优先级数字越小。如果反过来测距中断被串口中断打断几十微秒显示出来的距离数据就会飘。volatile关键字在中断共享变量里是必须的。只要变量在中断和主循环之间共享编译器就可能对它做优化导致主循环读不到最新值。比如中断里更新的width_us变量主循环读取时必须用volatile修饰。这个项目在hc_sr04.h里把距离变量声明成了volatile uint16_t做到了规范。我见过不少开源项目没有这个关键修饰导致程序跑起来数据时灵时不灵查了半天才发现是优化问题。4. 仿真验证实操Proteus与Wokvi怎么玩4.1 Proteus仿真文件的正确使用姿势项目里附带的是Proteus仿真工程很多人拿到.pdsprj文件就双击结果提示找不到元件库或者版本不兼容。Proteus的版本兼容性是个老大难旧版打不开新版工程是家常便饭。我的建议是先看README里标注的Proteus版本比如这个项目用的是8.9那就尽量用8.9到8.13之间的版本打开太大或太小都可能出问题。Proteus仿真STM32有一个关键点仿真工程里放的是stm32f103c8的模型要让它跑起来必须把编译生成的hex文件加载进芯片。操作路径是双击芯片 - Program File里选择MDK-ARM编译生成的.hex文件 - 设置时钟频率为72MHz - 点运行。这里有个大坑如果忘记设置晶振频率Proteus默认可能按低速运行会造成延时严重不准超声波回波的时间计算全错。还有一点Proteus里的STM32模型不是一个“完整”的芯片它只实现了部分外设而且很多外设的行为和真实芯片有差异。比如内部上拉电阻的强度、DWT计数器的行为Proteus模型未必完全模拟。所以仿真文件的价值更多在于验证逻辑流而不是验证精确时序。4.2 仿真能验证什么不能验证什么我总结了一条经验仿真过了不说明硬件没问题但仿真都过不了更别指望硬件一次通。仿真能验证的高价值部分有三个。第一OLED显示逻辑I2C时序在仿真层面可以跑通判断屏上是否显示正确的距离值第二串口通信通过Proteus的虚拟终端可以看调试输出不用接一根真实的USB线第三GPIO逻辑翻转Trig引脚是不是输出了10us的高电平脉冲用虚拟示波器能测量波形幅度和宽度都能看到。仿真局限也很明显。HC-SR04在Proteus里虽然有模型但模型只做了简单模拟它不会模拟环境温度对声速的影响不会模拟真实模块Echo输出5V电平的电气特性更不会模拟传感器盲区。另外仿真里的“距离”是固定的滑块或电压输入不会像真实超声波那样随障碍物移动实时变化。所以仿真通过只代表代码逻辑成立不代表硬件连接没问题。真实HC-SR04的Echo信号接不进STM32的3.3V引脚这在仿真里完全体现不出来必须在实物阶段处理。4.3 测距项目仿真的定时器参数计算实例如果你想在Proteus里复现这个测距逻辑定时器配置是个绕不开的环节。我们以TIM2的输入捕获配置为例把参数算清楚内部时钟 72MHz 预分频器PSC 72 - 1 71 计数频率 72MHz / 72 1MHz 计数周期 1us这样设置之后计数器每1us加116位计数器最大计数值65535对应65.535ms。Echo高电平时间最长也就几十毫秒量程大约在4米左右对于HC-SR04的5米量程来说勉强够用实用场景里3米以内是常见区间所以够用。距离计算部分就很简单了timer读到的两点差值直接就是微秒数uint16_t width_us end_edge - start_edge; float distance_cm width_us / 58.0f;有人问如果我要把量程扩展到5米以上16位计数器不够怎么办两个方案一是改预分频器让计数频率变成0.5MHz每2us计数一次量程翻倍但分辨率降到2us二是用32位定时器TIM5或者用两个通道测得更精细。这说明了在STM32项目里没有“万能配置”每次改量程和精度都要重新算一遍时钟树参数。仿真平台最适合做这种参数验证秒级改参数不用重新焊板子。5. 编译、烧录与问题排查实录5.1 工具链准备Keil MDK5、驱动与芯片支持包我自己是从Keil MDK5的项目文件开始实测的。整个工具链就三样东西Keil MDK5、ST-Link驱动、STM32F1系列芯片支持包。关于STM32芯片支持包这是初学者的第一道坎。打开Keil的Pack Installer找到STMicroelectronics - STM32F1 Series - 选覆盖F103C8的DFP版本然后点击Install。这里经常出现两种问题Pack Installer下载速度慢、断点后无法续传。解决方法要么挂加速直接用官网下载离线pack包然后在Pack Installer里选择“Import”导入本地文件这个方法百试百灵推荐给所有网络不佳的开发者。还有人问Keil能不能同时开发C51和STM32。可以但要注意安装路径和管理方式。C51和ARM是两套完全独立的工具链Keil 5的安装包是分开的你先装MDK5的ARM版本再装C51版装到同一个安装目录两者就可以共存。启动Keil时新建工程会自动根据芯片选择ARM编译器还是C51编译器不需要手动切换。ST-Link驱动我再次提醒ST-Link在Windows 10以上通常即插即用但如果你电脑无法识别USB设备大概率是驱动被占用或者装错。可以用设备管理器查看是否有带感叹号的ST-Link设备然后手动更新驱动指向ST官网的STSW-LINK009安装包。记得把ST-Link的固件也升级到最新老固件对F103没问题但对后续更高型号芯片可能会出现识别失败。5.2 三个高频问题的排查表我在烧录实测过程中把最容易出现的问题整理成了一张速查表。这些问题几乎覆盖了STM32开源项目初学者99%的翻车点问题现象可能原因处理办法电脑完全不识别USB设备USB线只有充电功能换一条带数据通信的线尤其注意长线材双击烧录报缺msvcp140.dll系统缺VC运行库安装VC 2015-2022 RedistributableKeil无法识别芯片包MDK版本过旧包格式不兼容升级Keil MDK到5.37以上离线导入Pack烧录提示No ST-LINK detectedSWD四线接触不良或驱动冲突重新插拔杜邦线卸载旧驱动重装烧录成功但上电不运行BOOT0电平异常万用表量BOOT0电压应接近0V串口打印乱码波特率不匹配统一为115200检查USB转串口芯片类型其中msvcp140.dll这块我要多说一句它早就不只是Keil的问题了。很多基于较新编译器的软件都会提示这个DLL缺失根因是系统缺少Microsoft Visual C 2015到2022的运行时组件。装一遍官方运行库合集基本能一劳永逸别去网上乱下单个DLL文件容易中招。5.3 实物调试的独家经验仿真通过不代表实物直接完结。我按项目README接好线后第一次上电就发现OLED花屏排查了半天才发现是I2C上拉电阻的焊接虚焊。这类问题仿真里根本不会出现仿真模型不会模拟虚焊。实物调试我总结了几条经验直接抄作业就行。第一上电第一步永远是量电压。万用表量AMS1117输出是不是3.3V量MCU每个VDD引脚是不是3.3V量HC-SR04的VCC是不是5V。电源不正常后面所有排障都是白费。第二逻辑分析仪是排时序问题的神器。HC-SR04的Trig和Echo信号用逻辑分析仪抓波形看Trig是不是有10us高电平脉冲Echo是不是有对应的高电平宽度一眼就能定位是模块没工作还是代码没触发。第三OLED不显示不一定是屏坏先用I2C扫描程序确认地址是不是0x3C很多OLED屏地址可能是0x3D或0x787位地址下不同地址不对花再多时间也白搭。还有一条关于HC-SR04的真实经验这个模块的Echo还是5V电平在实物上必须经过分压或电平转换再接STM32。项目原理图已经做了分压但如果你是自己飞线搭建一定要加一个10k和6.2k的分压电阻。我见过很多人直接怼上去运行十几分钟后测距数据开始飘最后查到是引脚损伤。这种“慢速损坏”是5V信号直连最常见的问题做项目时一定要防范。最后再分享一个小技巧把整个项目从代码到原理图到仿真完整跑过一遍之后我的结论是这个开源STM32项目具备相当高的参考价值。它不是那种代码能跑但硬件一塌糊涂的半吊子也不是理论上完美但根本不实用的PPT项目。它真正做到了“三件套闭环”原理图能指导接线代码能直接编译烧录仿真能快速验证逻辑。对于想用STM32做课程设计、毕设预研或者想学习HC-SR04和OLED这类经典外设开发的读者这是一份高质量的样本工程。最后分享一个我自己的习惯拿到任何STM32开源项目先花15分钟读README和目录结构再花15分钟看原理图电源和时钟最后才看代码。因为代码只是工程的外表硬件设计才是灵魂。你按照这个顺序去拆解项目能学到的东西会比直接点编译键多得多。如果后续想在这个项目基础上加功能我建议第一步是加一个FreeRTOS把测距、显示、串口分成三个独立任务你会体验到嵌入式系统真正的实时调度。之后再研究STM32的OTA升级或者无线透传这套底子都能接得住。

相关推荐

前端DOM完全指南:从节点操作、渲染性能到虚拟DOM与事件流
前端DOM完全指南:从节点操作、渲染性能到虚拟DOM与事件流

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

基于PX4+Gazebo+ROS的四旋翼自主避障仿真实战
基于PX4+Gazebo+ROS的四旋翼自主避障仿真实战

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

Mailcow:开源容器化邮件服务器实战,从DNS到投递的全链路避坑
Mailcow:开源容器化邮件服务器实战,从DNS到投递的全链路避坑

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

eslint-plugin-react 的 react/jsx-first-prop-new-line 规则详解:统一 JSX 首个属性的换行位置
eslint-plugin-react 的 react/jsx-first-prop-new-line 规则详解:统一 JSX 首个属性的换行位置

开发工具代码质量静态分析 【免费下载链接】eslint-plugin-react React-specific linting rules for ESLint 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-react 点击查看 免费下载 本篇技术指南围绕 eslint-plugin-react 中的 react/jsx-first-pro… · 2026/9/25 2:14:59

FAST Colors 1.x 中的 PixelBox.modifiedMedianCut:改良中值切分量化算法的 API 深度解析
FAST Colors 1.x 中的 PixelBox.modifiedMedianCut:改良中值切分量化算法的 API 深度解析

前端UI组件 【免费下载链接】fast The adaptive interface system for modern web experiences. 项目地址: https://gitcode.com/gh_mirrors/fa/fast 点击查看 免费下载 本文围绕 microsoft/fast-colors(FAST 1.x 版本)的 API 文档页 PixelB… · 2026/9/25 2:14:59

医疗大模型微调语料全流程:格式转换、清洗与配比实战指南
医疗大模型微调语料全流程:格式转换、清洗与配比实战指南

简介:面向大型语言模型微调训练的医疗数据集,适合算法工程师、医学信息研究者及有一定机器学习基础的初学者。资源整合了内科、外科、儿科、肿瘤科等科室的中文问诊对话,以及妇产科、男科、肝病等专科数据,并包含huatuo、llama、m… · 2026/9/25 2:14:53

BullMQ 持久连接指南:Worker 与 Queue 的 Redis 断线自动重连与 maxRetriesPerRequest 配置
BullMQ 持久连接指南:Worker 与 Queue 的 Redis 断线自动重连与 maxRetriesPerRequest 配置

后端消息队列任务调度 【免费下载链接】bullmq BullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/bu/bullmq 点击查看 免费下载 在微服务架构… · 2026/9/25 2:14:53

Unity3DTraining 设计模式实战:桥接模式(Bridge Pattern)——把抽象与实现解耦,让课程与系所各自独立变化
Unity3DTraining 设计模式实战:桥接模式(Bridge Pattern)——把抽象与实现解耦,让课程与系所各自独立变化

示例工程 【免费下载链接】Unity3DTraining 【Unity杂货铺】unity大杂烩~ 项目地址: https://gitcode.com/gh_mirrors/un/Unity3DTraining 点击查看 免费下载 桥接模式(Bridge Pattern)是结构型设计模式中的经典一员,它的核心是把… · 2026/9/25 2:14:53

SqlMIResilientCloudApp 实战:用 C 重试逻辑打造可抵御 Azure SQL 托管实例故障转移的弹性云应用
SqlMIResilientCloudApp 实战:用 C 重试逻辑打造可抵御 Azure SQL 托管实例故障转移的弹性云应用

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/25 2:14:53

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码