跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

SBUS 协议深度解析:原理、硬件与 STM32 实战

SBUS 协议作为遥控器与飞控间的串行通信标准,凭借单线多通道、抗干扰强及低延迟特性成为行业主流。深入剖析其反向 UART 原理、25 字节帧结构及 11bit 通道数据打包规则,提供 STM32 硬件电平转换方案与 DMA 接收代码示例,帮助开发者解决信号解析错误、波特率配置不当等常见问题,实现稳定可靠的控制信号传输。

Elasticer发布于 2026/4/10更新于 2026/5/2719 浏览

SBUS 协议深度解析:原理、硬件与 STM32 实战

在无人机、航模和机器人领域,控制信号的'稳定、快速、可靠'是核心诉求。传统的 PWM 信号虽然直观,但通道数有限、抗干扰弱且布线复杂。相比之下,由 FUTABA 公司设计的 SBUS(Serial Bus)协议凭借单线传输多通道数据、强抗干扰和低延迟的优势,已成为行业主流。

本文将从原理、硬件接口、协议细节到代码实现,全面拆解 SBUS 协议。无论你是刚入门的电子爱好者,还是需要落地项目的工程师,都能从中找到实用的技术参考。

一、SBUS 协议基础认知:核心定位与优势对比

很多人容易将 SBUS 与常见的 UART、PWM 混淆。明确其核心定位很重要:SBUS 是基于反向电平 UART 的'应用层控制协议',专门用于遥控器与接收机、接收机与飞控/执行器之间的控制信号传输。

1.1 为什么需要 SBUS?传统方案的痛点

在 SBUS 出现之前,航模和早期无人机主要使用 PWM 或 PPM 协议。通过下表可以直观看到它们的局限性:

传输方案通道数限制布线复杂度抗干扰能力延迟表现适用场景
PWM每个通道需 1 根线,常见 4-6 通道极高:N 个通道需 N+1 根线弱:模拟信号易受电磁干扰中等:单通道约 10ms入门级航模、简单机器人
PPM单线可传多通道(常见 8 通道以内)低:单线传输多通道中等:优于 PWM,不如数字协议中等:帧周期约 20ms中端航模,对布线有要求
SBUS单线可传 16 通道(标准),2.0 支持更多极低:仅需 1 根信号线 +GND强:数字信号带校验机制低:标准 10ms,高速 4ms无人机、专业航模、工业机器人

1.2 SBUS 的核心优势

结合补充信息,SBUS 的核心价值主要体现在以下几点:

核心优势具体说明带来的价值
单线多通道传输标准 SBUS 单线可传输 16 个控制通道数据大幅简化布线,减少设备内部空间占用
抗干扰能力强采用数字信号传输,帧结构带校验位,反向电平逻辑高空飞行或复杂电磁环境下保证信号稳定
延迟低标准模式 100Hz(10ms),高速模式 250Hz(4ms)实现精准实时控制,如姿态调整、特技动作
协议简洁易实现基于 UART 扩展,帧结构固定(25 字节)降低开发者门槛,无需复杂协议栈
支持故障检测帧结构含标志位,可检测信号丢失、FailSafe 状态提升系统可靠性,触发预设保护动作
宽电压兼容支持 3.5V~8.4V 输入电压减少额外电源转换模块,简化硬件设计
高兼容性广泛兼容 Betaflight、APM、PX4 等主流飞控系统降低选型成本,适配多场景开发需求

1.3 典型应用场景

SBUS 协议凭借其核心优势,广泛应用于各类需要精准控制的场景:

  • 无人机:消费级 DIY 穿越机、工业级测绘无人机的飞控与遥控器通信。
  • 航模:固定翼、直升机、多旋翼等专业航模的遥控系统,尤其适合大型航模与滑翔机。
  • 机器人:工业机械臂、服务机器人、AGV 小车的运动控制模块通信。
  • 智能设备开发:通过 Arduino、ESP32 等开源平台实现自定义控制(如遥控车船、智能云台)。
  • 其他:特种作业设备(如遥控巡检机器人)、教学实验平台等。

二、SBUS 核心工作原理:反向电平的 UART 协议详解

SBUS 的本质是'反向电平的 UART 串行协议'。简单来说,SBUS 并没有脱离 UART 的基本框架,只是在电平逻辑、波特率等参数上做了定制化调整。

下面从物理层、电平逻辑、波特率、帧周期、工作流程五个核心维度,拆解 SBUS 的工作原理。

2.1 物理层与电平逻辑:硬件第一门槛

2.1.1 物理层参数

SBUS 的物理层非常简单,仅需要 2 根线即可完成通信:1 根信号线 +1 根 GND。

物理层参数具体规格设计目的与标准 UART 的差异
传输线数量1 根信号线 + 1 根 GND极简布线,降低成本标准 UART 通常为 TX/RX 双线,SBUS 为单线
供电电平3.3V 电平(部分兼容 5V)适配主流 MCU(如 STM32、ESP32)标准 UART 无强制要求
传输距离常规 10 米以内,优质线材可达 20 米满足大多数控制设备的内部或短距离通信长距离需加差分电路,SBUS 不直接支持
2.1.2 反向电平逻辑(核心难点)

这是 SBUS 与标准 UART 最核心的差异之一,也是很多开发者初次接触时最容易踩坑的地方——SBUS 采用'反向电平逻辑',与标准 UART 完全相反。

逻辑状态SBUS 电平(反向逻辑)标准 UART 电平(正向逻辑)注意事项
逻辑'1'(高电平)低电平(约 0V)高电平(3.3V/5V)若直接接入标准 UART 会导致无法解析,必须添加电平反向电路
逻辑'0'(低电平)高电平(约 3.3V)低电平(约 0V)

重点提醒:SBUS 的反向电平逻辑是'硬件适配的第一道门槛'。如果跳过电平反向步骤,即使 UART 参数配置正确,也无法解析出正确的 SBUS 数据,只会得到一堆乱码。

2.1.3 常用电平转换方案

实现 SBUS 反向电平到标准 UART 电平的转换,主流有三种方案,适配不同场景需求:

方案 1:SN74LVC1G240 总线缓冲器(推荐小型设备)

SN74LVC1G240 是一款单路总线缓冲器/线路驱动器,具备电平转换和信号缓冲功能,适合 3.3V 系统。其核心优势是静态电流小、工作电压范围宽(1.65V~5.5V),封装小巧,非常适合无人机、航模等小型设备。

电路连接说明:

SN74LVC1G240 引脚连接对象作用说明
A(输入端)SBUS 接收机信号输出端接收反向电平的 SBUS 原始信号
Y(输出端)MCU 的 UART 接收引脚输出转换后的标准 UART 电平信号
G(使能端,低有效)MCU 的 GPIO 引脚或直接接 GND控制芯片使能
VCC3.3V 电源为芯片提供工作电压
GND电源地保证电平参考一致
方案 2:74HC14 反相器(低成本通用)

74HC14 是六路施密特触发反相器,具备信号整形和反向功能,成本低、易采购,适合原型开发或批量生产场景。使用时仅需其中一路反相器即可完成电平转换。

电路连接说明:

74HC14 引脚连接对象作用说明
1A(反相输入端)SBUS 接收机信号输出端接收反向电平的 SBUS 原始信号
1Y(反相输出端)MCU 的 UART 接收引脚输出转换后的标准 UART 电平信号
VCC3.3V/5V 电源为芯片提供工作电压
GND电源地与接收机、MCU 共地

优势与注意事项: 施密特触发功能可过滤信号噪声,适合电磁环境复杂的场景;六路设计可预留多路备用。需注意确保输入信号幅度满足芯片阈值要求。

方案 3:三极管反相电路(极简低成本)

若临时开发或成本敏感,可采用 NPN 三极管搭建极简反相电路,仅需三极管、两个电阻即可实现。

  • SBUS 信号通过 1kΩ 电阻连接到 NPN 三极管(如 S9014)的基极;
  • 三极管发射极接地;
  • 集电极通过 10kΩ 上拉电阻连接到 3.3V 电源,同时集电极作为输出端连接到 MCU 的 UART 接收引脚。

优势与注意事项: 元件极少、成本极低,适合临时验证。但信号整形效果较差,抗干扰能力弱,不适合批量生产或复杂电磁环境。

特殊说明:集成飞控内置转换电路

在集成度高的飞控(如 Pixhawk、Betaflight 飞控)中,SBUS 接收端口已内置电平反转电路,可直接将 SBUS 接收机的信号输出端连接到飞控的'SBUS'标注定制口,无需额外添加电平转换电路。

2.2 波特率与帧周期:参数必须精准匹配

2.2.1 波特率:固定 100kbps

波特率是串口通信的核心参数之一,SBUS 采用'非标准波特率'——100kbps(100000 bit/s),且数据格式固定为 8 位数据位、偶校验、2 位停止位(8E2),这是正确配置串口的基础。

参数SBUS 规格常见误区影响
波特率固定 100000 bit/s按 115200 配置 UART导致数据解析错误,通信失败
数据格式8 位数据位、偶校验、2 位停止位忽略校验位或停止位配置帧同步失败,数据错乱
比特率误差容忍度≤1%使用精度低的外置晶振误差过大会出现帧丢失、数据错乱
// 定义 SBUS 使用的 UART 句柄(示例使用 USART1)
UART_HandleTypeDef huart1;

/**
 * @brief SBUS UART 初始化配置
 * @note 参数配置为 100kbps 波特率,8 位数据位,偶校验,2 位停止位
 */
void SBUS_UART_Init(void)
{
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 100000; // SBUS 标准波特率
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_2;
    huart1.Init.Parity = UART_PARITY_EVEN;
    huart1.Init.Mode = UART_MODE_RX; // 仅配置为接收模式
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    
    if (HAL_UART_Init(&huart1) != HAL_OK)
    {
        Error_Handler(); // 初始化失败处理
    }
    
    // 启用中断接收(推荐使用 DMA 降低 CPU 负载)
    HAL_UART_Receive_IT(&huart1, (uint8_t*)&sbus_rx_buf, 1);
}

/**
 * @brief UART 接收中断回调函数
 * @param huart: UART 句柄指针
 * @note 实现单字节接收和帧同步检测
 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)
    {
        static uint8_t sbus_frame_buf[25]; // SBUS 帧缓存 (25 字节)
        static uint8_t frame_index = 0;     // 帧同步检测:0x0F 为起始字节
        
        if (sbus_rx_buf == 0x0F)
        {
            frame_index = 0;
        }
        
        // 存储接收数据
        sbus_frame_buf[frame_index++] = sbus_rx_buf;
        
        // 完整帧接收完成
        if (frame_index >= 25)
        {
            frame_index = 0;
            SBUS_Frame_Parse(sbus_frame_buf); // 调用帧解析函数
        }
        
        // 重新启用中断接收
        HAL_UART_Receive_IT(&huart1, (uint8_t*)&sbus_rx_buf, 1);
    }
}
// 定义 SBUS DMA 接收缓存(采用循环模式自动覆盖旧数据)
uint8_t sbus_dma_buf[50]; // 双帧缓存防止溢出

// SBUS UART+DMA 初始化
void SBUS_UART_DMA_Init(void)
{
    // 1. 完成基础 UART 配置
    SBUS_UART_Init();
    
    // 2. 配置 DMA 接收
    __HAL_RCC_DMA2_CLK_ENABLE(); // 使能 DMA 时钟(需根据 MCU 型号调整)
    hdma_usart1_rx.Instance = DMA2_Stream2;
    hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;
    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; // 循环模式
    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_MEDIUM;
    hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    
    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
    {
        Error_Handler();
    }
    
    // 3. 绑定 UART 与 DMA
    __HAL_LINKDMA(&huart1, hdmarx, hdma_usart1_rx);
    
    // 4. 启动 DMA 接收
    HAL_UART_Receive_DMA(&huart1, sbus_dma_buf, sizeof(sbus_dma_buf));
}
2.2.2 帧周期:多模式适配不同实时性需求

SBUS 以'帧'为单位传输数据,每帧包含完整的 16 通道控制信息。帧周期决定了控制信号的刷新率,直接影响控制延迟,支持三种传输模式:

传输模式帧周期刷新率延迟表现适用场景
标准模式(默认)10ms100Hz单帧延迟≤10ms普通无人机、航模、机器人
高速模式4ms250Hz单帧延迟≤4ms穿越机、竞速航模
低速模式14ms71.4Hz延迟较高,功耗更低低功耗设备、长距离遥控

补充说明:帧周期是'从接收机发送一帧数据到下一次发送的时间间隔',而单帧数据的传输时间极短(25 字节×8bit=200bit,按 100kbps 波特率计算,传输时间=200bit/100000bit/s=2ms),因此控制延迟主要由帧周期决定,而非单帧传输时间。

2.3 完整工作流程:从遥控器到执行器的信号流转

SBUS 的工作流程可分为'信号采集 - 编码 - 传输 - 解码 - 执行'五个步骤,全程实现数字信号的闭环流转:

  1. 信号采集:遥控器通过摇杆、拨杆等操作部件,采集用户的控制指令,将这些操作转换为模拟电信号。
  2. 模拟转数字 + 编码:遥控器内部的 MCU 将模拟电信号转换为数字信号,按照 SBUS 协议的帧结构,将 16 个通道的数字控制信号编码为 25 字节的 SBUS 数据帧。
  3. 无线传输:遥控器通过 2.4GHz 无线通信模块(常见 FHSS 跳频技术),将编码后的 SBUS 数据帧发送给接收机。
  4. 接收 + 解码:接收机通过 2.4GHz 模块接收无线信号,解调后得到 SBUS 数据帧,再按照 SBUS 协议解析出 16 个通道的控制值(原始范围 0~2047)。
  5. 信号输出 + 执行:接收机通过 SBUS 单线将解析后的控制信号传输给飞控/执行器,飞控/执行器将控制值映射到自身所需的范围,驱动执行部件完成相应动作。

简化流程图:用户操作 → 遥控器(采集 + 编码) → 2.4GHz 无线传输 → 接收机(接收 + 解调) → SBUS 单线传输 → 飞控/执行器(解码 + 映射 + 执行)

三、SBUS 通讯协议深度解析:25 字节帧结构拆解

SBUS 协议的核心是'固定 25 字节的帧结构'——每帧数据的长度、字段定义、字节顺序都是固定的,这也是其解析逻辑简单的关键原因。掌握帧结构,就掌握了 SBUS 协议的核心。

3.1 帧结构总览:25 字节的固定组成

标准 SBUS 帧(1.0 版本)的总长度为 25 字节,字段从前往后依次为:起始字节、通道数据(22 字节)、标志位、结束字节。

字段名称字节数固定值/格式核心功能备注
起始字节10x0F标志一帧数据的开始,用于帧同步所有合法 SBUS 帧的第一个字节必须是 0x0F
通道数据2216×11bit 数据存储 16 个控制通道的原始值22 字节=176bit,正好容纳 16 个 11bit 通道数据
标志位18bit 标志位故障检测、帧状态指示是实现故障保护的关键
结束字节10x00 或 0x7E标志一帧数据的结束多数设备使用 0x00,部分设备支持 0x7E

关键计算:16 个通道×11bit/通道=176bit;176bit÷8bit/字节=22 字节。这就是通道数据字段长度为 22 字节的原因。

3.2 各字段详细解析(重点!)

下面对每个字段进行详细拆解,尤其是通道数据和标志位,这两个字段是解析 SBUS 数据的核心。

3.2.1 起始字节:0x0F——帧同步的'敲门砖'

起始字节的唯一作用是'帧同步'——告诉解析端(如飞控 MCU)'从这个字节开始,后面是完整的 SBUS 帧数据'。

解析逻辑:MCU 在接收 SBUS 数据时,会持续监测接收字节,当检测到某个字节为 0x0F 时,就认为后续 24 个字节(共 25 字节)是一帧完整的 SBUS 数据,开始后续的解析流程。

注意:如果在监测过程中,连续多个字节都不是 0x0F,说明当前没有有效帧,解析端会持续等待,直到检测到 0x0F 为止。

3.2.2 通道数据:22 字节承载 16 个 11bit 通道值(核心难点)

这是 SBUS 帧结构中最复杂的部分——16 个通道的控制值被'紧密打包'在 22 字节中,每个通道占用 11bit,没有字节对齐,需要按位解析。

先明确两个关键前提:

  • 每个通道的原始值范围:0~2047(11bit 无符号整数)。
  • 实际应用中,遥控器发送的原始通道值通常在 2001800 之间,而飞控常用的控制范围是 10002000,因此解析后需要进行线性缩放。

通道数据的打包规则(按位排列):22 字节共 176bit,按从低字节到高字节、从低位到高位的顺序,依次存储 16 个通道的 11bit 数据。

通道编号占用的比特位(字节 B1~B22 的 bit 位)解析逻辑(以 STM32 为例,C 语言)
通道 0(CH0)B1 的 bit0~bit10`channels[0] = ((sbus_frame[1]
通道 1(CH1)B2 的 bit3~bit13`channels[1] = ((sbus_frame[2] >> 3
通道 2(CH2)B3 的 bit6~bit16`channels[2] = ((sbus_frame[3] >> 6
通道 3(CH3)B5 的 bit1~bit11`channels[3] = ((sbus_frame[5] >> 1
通道 4(CH4)B6 的 bit4~bit14`channels[4] = ((sbus_frame[6] >> 4
通道 5(CH5)B7 的 bit7~bit17`channels[5] = ((sbus_frame[7] >> 7
通道 6(CH6)B9 的 bit2~bit12`channels[6] = ((sbus_frame[9] >> 2
通道 7(CH7)B10 的 bit5~bit15`channels[7] = ((sbus_frame[10] >> 5
通道 8(CH8)B12 的 bit0~bit10`channels[8] = ((sbus_frame[12]
通道 9(CH9)B13 的 bit3~bit13`channels[9] = ((sbus_frame[13] >> 3
通道 10(CH10)B14 的 bit6~bit16`channels[10] = ((sbus_frame[14] >> 6
通道 11(CH11)B16 的 bit1~bit11`channels[11] = ((sbus_frame[16] >> 1
通道 12(CH12)B17 的 bit4~bit14`channels[12] = ((sbus_frame[17] >> 4
通道 13(CH13)B18 的 bit7~bit17`channels[13] = ((sbus_frame[18] >> 7
通道 14(CH14)B20 的 bit2~bit12`channels[14] = ((sbus_frame[20] >> 2
通道 15(CH15)B21 的 bit5~bit15`channels[15] = ((sbus_frame[21] >> 5
完整 STM32 通道解析函数
// 16 通道 SBUS 数据缓冲区
uint16_t sbus_channels[16] = {0};

/**
 * SBUS 帧解析函数
 * @param sbus_frame 输入 25 字节 SBUS 帧数据
 */
void SBUS_Frame_Parse(uint8_t *sbus_frame)
{
    // 帧头校验(0x0F)和帧尾校验(0x00 或 0x7E)
    if (sbus_frame[0] != 0x0F || (sbus_frame[24] != 0x00 && sbus_frame[24] != 0x7E))
    {
        return; // 无效帧直接返回
    }
    
    // 解析 16 个通道数据
    sbus_channels[0] = ((sbus_frame[1] | sbus_frame[2] << 8) & 0x07FF);
    sbus_channels[1] = ((sbus_frame[2] >> 3 | sbus_frame[3] << 5) & 0x07FF);
    sbus_channels[2] = ((sbus_frame[3] >> 6 | sbus_frame[4] << 2 | sbus_frame[5] << 10) & 0x07FF);
    sbus_channels[3] = ((sbus_frame[5] >> 1 | sbus_frame[6] << 7) & 0x07FF);
    sbus_channels[4] = ((sbus_frame[6] >> 4 | sbus_frame[7] << 4) & 0x07FF);
    sbus_channels[5] = ((sbus_frame[7] >> 7 | sbus_frame[8] << 1 | sbus_frame[9] << 9) & 0x07FF);
    sbus_channels[6] = ((sbus_frame[9] >> 2 | sbus_frame[10] << 6) & 0x07FF);
    sbus_channels[7] = ((sbus_frame[10] >> 5 | sbus_frame[11] << 3) & 0x07FF);
    sbus_channels[8] = ((sbus_frame[12] | sbus_frame[13] << 8) & 0x07FF);
    sbus_channels[9] = ((sbus_frame[13] >> 3 | sbus_frame[14] << 5) & 0x07FF);
    sbus_channels[10] = ((sbus_frame[14] >> 6 | sbus_frame[15] << 2 | sbus_frame[16] << 10) & 0x07FF);
    sbus_channels[11] = ((sbus_frame[16] >> 1 | sbus_frame[17] << 7) & 0x07FF);
    sbus_channels[12] = ((sbus_frame[17] >> 4 | sbus_frame[18] << 4) & 0x07FF);
    sbus_channels[13] = ((sbus_frame[18] >> 7 | sbus_frame[19] << 1 | sbus_frame[20] << 9) & 0x07FF);
    sbus_channels[14] = ((sbus_frame[20] >> 2 | sbus_frame[21] << 6) & 0x07FF);
    sbus_channels[15] = ((sbus_frame[21] >> 5 | sbus_frame[22] << 3) & 0x07FF);
    
    // 解析状态标志位
    SBUS_Flags_Parse(sbus_frame[23]);
}

在实际调试中,如果发现数据全是乱码,首先检查电平是否反了,其次确认波特率是否为 100kbps,最后再看帧头帧尾是否正确。这三个环节排查下来,基本能解决 90% 的 SBUS 通信问题。

目录

  1. SBUS 协议深度解析:原理、硬件与 STM32 实战
  2. 一、SBUS 协议基础认知:核心定位与优势对比
  3. 1.1 为什么需要 SBUS?传统方案的痛点
  4. 1.2 SBUS 的核心优势
  5. 1.3 典型应用场景
  6. 二、SBUS 核心工作原理:反向电平的 UART 协议详解
  7. 2.1 物理层与电平逻辑:硬件第一门槛
  8. 2.1.1 物理层参数
  9. 2.1.2 反向电平逻辑(核心难点)
  10. 2.1.3 常用电平转换方案
  11. 方案 1:SN74LVC1G240 总线缓冲器(推荐小型设备)
  12. 方案 2:74HC14 反相器(低成本通用)
  13. 方案 3:三极管反相电路(极简低成本)
  14. 特殊说明:集成飞控内置转换电路
  15. 2.2 波特率与帧周期:参数必须精准匹配
  16. 2.2.1 波特率:固定 100kbps
  17. 2.2.2 帧周期:多模式适配不同实时性需求
  18. 2.3 完整工作流程:从遥控器到执行器的信号流转
  19. 三、SBUS 通讯协议深度解析:25 字节帧结构拆解
  20. 3.1 帧结构总览:25 字节的固定组成
  21. 3.2 各字段详细解析(重点!)
  22. 3.2.1 起始字节:0x0F——帧同步的“敲门砖”
  23. 3.2.2 通道数据:22 字节承载 16 个 11bit 通道值(核心难点)
  24. 完整 STM32 通道解析函数
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Rust 与 WebAssembly 深度实战:浏览器与 Node.js 高性能应用
  • 智能家居数据可视化:5 个维度构建专业级 Home Assistant 仪表板
  • Python 属性描述符:原理剖析与 ORM 实战
  • Java 对象比较详解:Comparable、Comparator 与 PriorityQueue 实战
  • Ubuntu 22.04 配置 MID360 激光雷达
  • Java 环境配置与首个程序实战指南
  • 渗透测试实战技巧总结:67 条常用命令与绕过方法
  • Java 大厂实习面试高频考点:MySQL、Redis、并发与算法实战
  • llama.cpp 大模型本地部署与推理指南
  • JWT(JSON Web Token)结构化知识体系与工程实践
  • GitHub 教育认证后如何领取 Copilot Pro
  • 旧安卓手机部署 Typecho 博客并实现外网访问
  • JavaAI 全流程实操指南:从需求到部署的智能开发体验
  • Spring AOP 核心原理与实战指南
  • C++ 面试常见基础问题与特性解析
  • go-zero 微服务架构入门与实践
  • 贪心算法实战:柠檬水找零、数组减半与最大数拼接
  • HarmonyOS 6.0 使用 PAC 脚本灵活管理网络连接
  • 从零开始学习 Web 安全与白帽黑客入门指南
  • 大模型时代的智能体(Agent)技术解析

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online