RS485控制台调试避坑指南:从乱码到稳定输出的实战解析

使用485串口通信时,有时候有乱码,有时候就没乱码 下面是代码部分部分 //主函数部分 int main(void) { GPIOInit();//GPIO初始化 USART3_Init(); USART_PutStr(USART3, "program haven be load\r\n"); delay_s(1); while(1) { test1(); } //测试代码部分 void test1(void) { unsigned char buf[5]; delay_s(1);//原始 uart3_Read(buf, sizeof 阅读详情

RS485控制台调试避坑指南:从乱码到稳定输出的实战解析

在工业控制和远程调试场景中,RS485因其长距离传输和抗干扰能力成为首选通信方式。然而,许多嵌入式开发者在将RS485适配为控制台时,常遭遇乱码、数据丢失等棘手问题。本文将以RT-Thread和FinSH控制台为例,深入解析硬件配置、软件调试和信号同步等关键环节,帮助开发者系统性解决RS485控制台调试难题。

1. RS485硬件基础与关键配置

RS485采用差分信号传输,最大支持1200米通信距离,但在控制台应用中需特别注意硬件使能控制。与UART的持续收发模式不同,RS485需要通过使能引脚(DE/RE)切换收发状态:发送时使能驱动器,接收时使能接收器。若硬件电路未正确设计,会导致信号冲突或电平异常。

典型硬件连接方案:

  • 使用MAX485或类似收发器芯片
  • 使能引脚连接MCU的GPIO(如PB12)
  • 终端电阻(120Ω)匹配长距离传输
  • 共模扼流圈抑制电磁干扰

注意:RS485总线必须采用菊花链拓扑,而非星型连接,否则会导致信号反射。未使用的节点应移除,避免引入阻抗不匹配。

配置示例如下(基于APM32F103):

#define RS485_EN_PIN GET_PIN(B, 12)
#define rs485_en_tx() rt_pin_write(RS485_EN_PIN, PIN_HIGH)
#define rs485_en_rx() rt_pin_write(RS485_EN_PIN, PIN_LOW)

/* 初始化时设置引脚模式 */
rt_pin_mode(RS485_EN_PIN, PIN_MODE_OUTPUT);
rs485_en_rx();  // 默认进入接收模式

2. 波特率匹配与时钟精度校准

乱码问题多源于波特率失配。RS485长距离传输时,时钟偏差会被放大,需确保主机和设备端波特率严格一致。建议采用标准波特率(如9600、19200、115200),避免使用自定义值。

时钟精度校准步骤:

  1. 检查MCU主时钟配置,确保USART时钟源稳定
  2. 使用示波器测量实际波特率,计算误差(应<2%)
  3. 调整USART的DIV分数值微调波特率

以下为RT-Thread中串口配置示例:

struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baud_rate = BAUD_RATE_9600;  // 长距离建议先用9600
config.data_bits = DATA_BITS_8;
config.stop_bits = STOP_BITS_1;
config.parity    = PARITY_NONE;

rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);

实测中发现,某些MCU的时钟树配置会导致USART时钟偏差。例如APM32F103使用HSI时钟时,需通过以下公式计算实际波特率:

实际波特率 = fCLK / (16 * USARTDIV)

其中USARTDIV为分频值,包含整数部分(DIV_Mantissa)和小数部分(DIV_Fraction)。若计算值与目标值偏差较大,需调整时钟源或分频系数。

3. FinSH控制台适配的软件关键点

3.1 输出重定向实现

需重写rt_hw_console_output函数,在发送前后切换收发状态:

void rt_hw_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char str_end = '\r';
    
    rs485_en_tx();  // 切换到发送模式
    rt_thread_mdelay(1);  // 等待稳定
    
    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            // 发送回车换行
            while(USART_ReadStatusFlag(USART3, USART_FLAG_TXBE) == RESET);
            USART_TxData(USART3, str_end);
        }
        while(USART_ReadStatusFlag(USART3, USART_FLAG_TXBE) == RESET);
        USART_TxData(USART3, str[i]);
    }
    
    // 等待发送完成
    while(USART_ReadStatusFlag(USART3, USART_FLAG_TC) == RESET);
    rs485_en_rx();  // 切换回接收模式
}

3.2 输入信号量同步机制

FinSH通过信号量阻塞等待输入,需在串口接收中断中正确释放信号量。常见问题是忘记调用rx_indicate回调:

static int apm32_uart_getc(struct rt_serial_device *serial)
{
    int ch = -1;
    struct apm32_usart *usart;
    
    RT_ASSERT(serial != RT_NULL);
    usart = (struct apm32_usart *)serial->parent.user_data;
    
    rs485_en_rx();  // 确保处于接收模式
    
    if (USART_ReadStatusFlag(usart->usartx, USART_FLAG_RXBNE) != RESET)
    {
        ch = USART_RxData(usart->usartx);
    }
    
    // 关键:调用接收指示器释放信号量
    if (serial->parent.rx_indicate != RT_NULL)
    {
        serial->parent.rx_indicate(&serial->parent, 1);
    }
    
    return ch;
}

在finsh_set_device()中,系统会设置rx_indicate回调为finsh_rx_ind,此函数负责释放shell->rx_sem信号量。若未正确触发该回调,FinSH线程将永远阻塞在rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER)。

4. 调试技巧与常见问题解决

4.1 乱码问题诊断流程

当出现乱码时,按以下步骤排查:

  1. 检查物理连接:使用示波器测量差分信号幅值(通常应>1.5V)
  2. 验证波特率:发送字符0x55(01010101b),用示波器测量位宽
  3. 测试收发切换时序:测量DE/RE引脚切换延迟(应<字符传输时间)
  4. 排查接地问题:确保所有节点共地,避免地电位差引入噪声

下表总结了常见乱码原因及解决方案:

现象可能原因解决方案
完全乱码波特率失配校准时钟源,测量实际波特率
偶尔丢字收发切换过快增加切换后延迟(1-2ms)
首字符丢失使能信号太慢提前切换发送模式
末尾字符截断过早切换接收等待TC标志位再切换

4.2 信号量阻塞问题调试

若FinSH无法接收输入,首先检查信号量状态:

// 在msh中查看信号量状态
list_sem

正常应看到shell_rx信号量值为0。若值为1,说明信号量被意外释放。常见问题包括:

  • 多次调用rx_indicate(需确保每次接收只调用一次)
  • 中断中未清除标志位导致重复进入
  • 数据溢出时未正确处理

可通过在finsh_rx_ind中添加调试输出定位问题:

static rt_err_t finsh_rx_ind(rt_device_t dev, rt_size_t size)
{
    rt_kprintf("[DEBUG] rx_ind called, size=%d\n", size);
    return rt_sem_release(&shell->rx_sem);
}

5. 长距离传输的稳定性优化

工业环境中RS485常需长距离传输,需额外考虑以下因素:

电缆选择:使用双绞屏蔽电缆(如CAT5e),屏蔽层单点接地 终端电阻:总线两端并联120Ω电阻,匹配特性阻抗 浪涌保护:添加TVS管防止雷击浪涌 隔离设计:使用隔离型RS485模块(如ADM2483)消除地环路

软件重传机制:针对可能的数据丢失,实现应用层确认重传:

#define MAX_RETRY 3

rt_err_t rs485_safe_send(const char *data, rt_size_t length)
{
    rt_uint8_t retry = 0;
    rt_err_t result;
    
    while (retry < MAX_RETRY)
    {
        result = rt_device_write(serial, 0, data, length);
        if (result == length) 
        {
            // 等待应答
            if (wait_ack(1000) == RT_EOK) 
            {
                return RT_EOK;
            }
        }
        retry++;
        rt_thread_mdelay(10);
    }
    return -RT_ERROR;
}

6. 实战案例:FinSH输入异常完整解决方案

某项目采用APM32F103+MAX485实现远程控制台,出现输入乱码问题。通过以下步骤解决:

  1. 测量发现实际波特率为10300(目标9600),误差达7.3%
  2. 调整时钟配置,使用HSE作为时钟源,误差降至0.5%
  3. 发现DE/RE切换延迟不足,发送完成后立即切换导致末尾字节截断
  4. 添加发送完成等待(TC标志检测)后问题解决
  5. 输入仍不稳定,检查发现未在接收函数中调用rx_indicate
  6. 添加回调触发后FinSH输入正常

最终稳定运行的配置代码:

/* 在drv_usart.c中完善接收函数 */
static rt_int32_t apm32_uart_getc(struct rt_serial_device *serial)
{
    int ch;
    struct apm32_usart *usart;
    
    usart = (struct apm32_usart *)serial->parent.user_data;
    
    if (USART_ReadStatusFlag(usart->usartx, USART_FLAG_RXBNE) != RESET)
    {
        ch = USART_RxData(usart->usartx);
        // 触发接收指示器
        if (serial->parent.rx_indicate != RT_NULL)
        {
            serial->parent.rx_indicate(&serial->parent, 1);
        }
        return ch;
    }
    return -1;
}

调试RS485控制台需系统性地考虑硬件设计、软件配置和通信协议三个方面。最初遇到问题时,我曾花费数天时间排查,最终发现是时钟树配置不当导致波特率偏差。后来在另一个项目中,又遇到接地不良引入的噪声问题。这些经验表明,RS485调试需要综合运用测量工具和系统分析方法,逐个排除潜在问题点。

RT-Thread实战:用RS485串口搞定Finsh控制台,手把手教你解决输入乱码问题 本文深入解析了RT-Thread系统中使用RS485串口实现Finsh控制台时遇到的输入乱码问题,提供了从硬件配置到软件实现的完整解决方案。重点分析了波特率匹配、收发切换时序和信号量处理等关键因素,并给出优化调试技巧,帮助开发者高效解决RS485通信中的Finsh控制台乱码问题。 阅读详情

相关推荐

串口称重仪表对接踩坑实录:从现场调试到稳定运行两年的工程细节

在工业自动化与数据采集场景中,串口通信依然是设备对接最常用的方式之一。无论是称重仪表、传感器还是老式工控机,RS232/RS485串口协议凭借其简单、可靠、低成本的优势,成为现场数据交互的基础。理解串口参数配置、帧结构解析以及校验机制,是保证通信链路稳定的前提;而在真实产线环境中,电磁干扰、设备占用、USB转串口异常等工程问题,往往比协议本身更具挑战。通过环形缓冲区、状态机解析、帧校验和自动重连等手段,可以构建高可用的数据采集系统,让设备在恶劣环境下长期稳定运行。本文从串口通信原理出发,结合称重仪表对接实践

weixin_34205826的博客 663

常见RS485及串口通信错误梳理

RS485通信及串口通信配置过程中常见的一些问题的梳理及解决方法与建议。

staypt的博客 2万+

RS485调试实战:用示波器看懂差分信号波形

RS485作为一种经典的差分通信协议,依靠A、B线间的电压差传输逻辑状态,其电压定义并不难理解,但真正的难点在于信号在真实总线上的动态表现。差分信号抗共模干扰的天然优势,使得RS485在工业现场长距离通信中广泛使用。然而,仅靠万用表测量静态电压往往难以排查偶发通信故障。通过示波器直接测量A、B对地波形并做减法运算,可以从波形上直观读出波特率、数据位和帧结构,让复杂的信号变化一目了然。示波器实测结合串口调试工具,还能快速定位接线反接、缺少终端电阻引起的振铃等问题。本文以RS485波形实测为主线,从探头接法到C

weixin_34151004的博客 401

RS485接收数据后发送乱码

序 最近调块板子上面有几路485,控制芯片STM32F407VE、转换芯片ADM2587,使用485转换器连接电脑,发现串口助手向板子发送数据后会收到乱码,经软硬件联合调试排除bug。 一、问题现象 1、485向上位机发送数据,串口助手正常收到数据 u8 test_buf[10]={0x02,0x12,0x22,0x32,0x42,0x52,0x62,0x72,0x82,0x92}; for(t=0;t<10;t++){ while(USART_GetFlagStatus(USART1, USAR

苍天蓝耀的博客 1万+

老电表RS485接入云平台的三种低成本稳定方案

RS485通信是工业设备联网的基础物理层技术,其差分传输特性决定了抗干扰与长距离能力;DL/T645作为国内电能表主流通信协议,广泛应用于机械式及早期电子式电表。理解其帧结构、时序要求(如≥330ms帧间隔)和BCC校验机制,是实现可靠数据上云的前提。技术价值在于盘活存量资产——避免整批更换电表,显著降低智慧能源改造成本;典型应用场景包括老旧小区能耗监测、工厂配电房数字化升级、双碳管理平台数据接入等。本文聚焦真实工程约束下的落地路径,详解串口透传、W5500硬栈网关、树莓派Modbus网桥三类方案,兼顾稳定

weixin_34337381的博客 513

Android车载串口通信全链路实战:UART/RS232/RS485配置与稳定传输

UART作为嵌入式系统最基础的异步串行通信接口,其本质是硬件级数据帧编解码模块,不提供握手、重传或纠错机制,可靠性完全依赖软硬件协同设计。在车载Android平台中,UART需经TTL电平输出,再通过RS232(点对点、单端)或RS485(多点、差分、半双工)实现物理层延伸,二者并非协议替代关系,而是电平转换标准。工程落地的关键在于Linux内核DMA使能、termios精准配置、SELinux权限管控及应用层帧同步协议。本文聚焦Android HAL+JNI串口封装、RS485总线抗干扰设计与ISO 16

weixin_34364071的博客 381

RS485串口乱码解决(F107VCT6)

我写好了串口RS485的初始化及发送函数,正是激动人心的时刻,本以为可以结束串口,继续往下学习新的外设了,可是编译下载后出现了乱码,再检查串口的波特率,停止位等与软件设置是一致的。找到文件stm32F10X.h,修改外部晶振大小,我的开发板是8M,所以修改如下:将25M改成8M的。最近在学习RS485串口的使用遇到一个大坑,在此记录一下,希望后面的人别上当。希望后面小伙伴遇到的时候能看见吧。如有侵权啥的联系我删除。修改过后,再下载编译,串口就没有问题了。

qq_65744513的博客 2932

树莓派Pico串口通信实战:从UART原理到MicroPython调试全攻略

串口通信是嵌入式开发中最基础也最关键的技能之一,无论是传感器数据采集、设备控制,还是与上位机交互,UART始终是连接硬件世界的通用语言。理解UART的硬件特性、电平标准和数据帧格式,是搭建稳定通信链路的前提。在实际工程中,开发者常面临引脚映射冲突、3.3V与5V电平不匹配、数据丢帧乱码等挑战,掌握系统性的排查方法至关重要。MicroPython为树莓派Pico提供了简洁的UART编程接口,结合协议设计、缓冲区管理和调试工具(如逻辑分析仪、pyserial),可高效实现从基础收发到复杂多设备组网的应用。本文围

weixin_33794672的博客 358

485串口收发首字符乱码问题

串口问题记录

woodsgrape的博客 1943

车载Android串口通信:HAL层、RS485时序与SELinux实战

串口通信是嵌入式系统与外部设备交互的基础技术,其核心在于Linux tty子系统对硬件的抽象与控制。理解串口驱动加载机制、termios参数配置原理及字符设备访问流程,是实现稳定通信的前提。在车规级环境中,该技术价值显著提升——需同时满足-40℃~85℃宽温运行、EMC抗扰、低功耗管理及功能安全要求。典型应用场景包括OBD诊断、ADAS传感器接入、CAN/RS485网关通信及智能座舱外设扩展。本文聚焦真实车载项目中高频问题:ft231x usb uart驱动兼容性、rs485自动收发电路时序失配,结合内核设

weixin_34127717的博客 258

串口调试助手实战指南:从UART原理到STM32/RS485调试与上位机开发

串口通信(UART)作为嵌入式系统中最基础也最常用的异步通信协议,凭借其简单可靠的特性,在单片机、传感器、工业控制等领域沿用至今。理解波特率、数据位、停止位等参数配置,以及TTL、RS232、RS485等物理层标准的区别,是进行设备调试的前提。借助串口调试助手这类可视化工具,开发者可以直观地观察字节流、发送十六进制指令、保存日志,从而快速定位通信链路中的问题。在实际项目中,无论是STM32裸机程序开发、51单片机外设交互,还是工业现场的RS485总线组网,调试助手都能显著提高排查效率。除此之外,掌握Pyth

weixin_29193359的博客 325

串口不死:从UART物理层、RS485到DMA缓冲区的IIoT调试指南

串口通信是工业现场最底层的可靠连接方式,其UART异步协议以确定性延迟和极低成本,在PLC、电表、变频器及边缘网关中广泛应用。理解物理层电平标准、数据帧格式、波特率计算与接收缓冲机制,是嵌入式开发者的基本功。RS485差分传输结合Modbus RTU协议,更让这一“老接口”在工业物联网场景中持续焕发价值。从STM32/GD32到Linux主机,串口调试往往涉及中断、DMA、环形缓冲区与协议解析等关键环节。本文以工程实践为主线,系统梳理稳定收发的方法与经典故障排查路径,为IIoT边缘接入提供可落地的技术参考。

weixin_34185512的博客 421

Doris Streamloader安装教程

Doris Streamloader 是一款用于将数据导入 Doris 数据库的专用客户端工具。本文介绍其在centos7环境下的安装过程

qq_44540985的博客 1092

STM32实战避坑指南:从选型到调试的完整排查思路

嵌入式开发中,STM32凭借ARM Cortex-M内核、丰富外设与成熟工具链,成为应用最广泛的MCU之一。开发者常面临芯片选型、标准库与HAL库选择、Keil与VSCode环境配置等基础问题,也会在SPI、ADC、CAN、FreeRTOS等实际场景中遇到时序异常、数据错乱或通信中断等棘手故障。理解内核差异、存储资源与外设映射,掌握逻辑分析仪、串口绘图等调试手段,能显著提升问题定位效率。本文从工程实践出发,系统梳理STM32从项目创建到外设驱动的通用方法,并结合高频踩坑案例给出可复用的排查清单,帮助开发者在

weixin_34008805的博客 393

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧)

本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。

g2h3i4j5的博客 1163

STM32内存大小与地址的对应关系以及计算方法

1、概述 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。 最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微

Ace's Blog 4万+

串口为何在IIoT底层长盛不衰:从RS485偏置电阻到Linux丢数据实战

UART、RS232、RS485是工业物联网底层通信的基础,理解其电气层设计(如偏置电阻、终端电阻)和MCU侧实现(如DMA、空闲中断)是保证稳定性的关键。在IIoT架构中,串口凭借低成本、确定性和生态惯性,成为现场设备与边缘网关之间的主流链路。从RS485组网到Linux串口丢数据排查,这些技术细节直接影响产线通信的可靠性。本文深入解析串口在IIoT中的真实定位,涵盖电气计算、MCU配置、Linux坑点及组网调试,帮助工程师解决实际工程问题。

weixin_34161064的博客 443

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9854

树莓派4B解锁六串口全攻略:硬件配置、软件调试与多设备通信实战

串口(UART)作为一种经典、可靠的异步串行通信接口,是嵌入式系统、物联网设备和工业控制领域连接传感器、执行器及外部模块的基础通信方式。其工作原理基于起始位、数据位和停止位的帧格式,通过TX(发送)和RX(接收)引脚实现全双工或半双工数据交换。在资源受限的单板计算机上,扩展串口数量对于构建复杂的数据采集与控制系统具有重要价值,能够满足智能农业、环境监测、工业自动化等多设备并行通信的应用需求。本文聚焦于树莓派4B平台,深入解析其Broadcom BCM2711芯片的硬件UART控制器资源,通过设备树(Devi

weixin_34129696的博客 362

十一、机器学习进阶知识:径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

本文对径向基神经网络(RBFNN)的理论基础及建模步骤进行介绍,之后使用Python实现基于RBFNN的数据预测,通俗易懂,适合新手学习,附源码及实验数据集。

weixin_42051846的博客 1万+

C# 固高板卡(总线型) 操作类

主要功能有:初始化,轴使能,正负方向手动移动,回0,点到点移动,等待移动完成,输入IO数据读取,输出IO控制,清除报警等功能。

StevenChen的博客 572

Keil软件仿真逻辑分析仪:STM32波形调试从入门到串口避坑

嵌入式开发中,逻辑分析仪是观察信号波形的利器,但硬件成本与上手门槛常让人望而却步。Keil MDK内置的软件仿真功能,通过模拟STM32内核与外设行为,将GPIO翻转、PWM输出、串口通信等信号以虚拟逻辑分析仪的方式呈现出来。其原理基于指令级仿真与时钟模型,无需真实芯片即可测量周期、占空比和数据位宽度,为代码逻辑验证提供了低成本捷径。在工程配置、仿真参数和信号添加等基础操作之上,软件仿真还能辅助排查串口乱码、发送卡死等经典问题,帮助开发者建立从时钟树到波特率计算的完整调试思路。无论是学习阶段的波形验证,还是

weixin_34007886的博客 461

【MATLAB-app】系列教程(含视频)第4、5、6课:实战_制作简单的图像处理软件

写作时间: 2020-12-27 我的教程目录 第1课:初步了解appdesigner 第2课:学会制作一个计算器 第3课:学习更多的控件(重点!) 第4课:实例1:制作一个图像处理软件 第5课:学习APPdesigner的设计精髓,框架 第6课:结合使用多种控件,函数等,丰富我们的实例1 第7课:app设计打包,完成工程应用导出 标题: 第4课:我的实例_学会制作一个图像处理软件 本文目录: 1.先看看我之前的一个工程 2.常用的基本组件控件 3.最常用且实用的控件的用法 -3.1 editfilel

wind 4055

串口不死:从电平标准到IIoT实战的硬核指南

从PLC到嵌入式Linux,串口通信依然是工业现场最可靠的“最后一百米”链路。其核心原理并不复杂:UART负责数据帧的收发,RS485/RS232在物理层通过差分或电平摆幅抵抗干扰。相比以太网,串口无需协议栈、时钟线,天然适配短距低速控制类场景,也因此成为Modbus RTU、DTU和边缘网关等IIoT方案的底层支撑。面对存量设备升级、高波特率乱码、DMA接收丢数据等实际工程问题,理解帧格式、接线规范与缓冲区设计,才能把这条四十年的总线真正用好。本文从电平标准到虚拟串口透传,再到老设备上云实战,系统梳理了串

weixin_34166847的博客 448

【数据集】中国2003年至2022年全天空每日气温数据集

中国2003年至2022年全天空每日气温数据集

WW、forever的博客 604

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入解析串口通信:从RS232到RS485的工业应用实战

本文深入解析了串口通信在工业自动化中的核心应用,重点对比了RS232与RS485两种标准。RS232适用于短距离点对点连接,而RS485凭借其差分信号传输和强大的抗干扰能力,成为构建长距离、多节点工业总线网络的首选。文章结合实战案例,详细阐述了RS485的布线技巧、协议设计及常见故障排查方法,为工程师提供了从原理到实践的完整指南。

uuu88的博客 466

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 从电子工程师的视角:CH340如何成为USB与串口世界的桥梁
下一篇: 从零构建嵌入式OTA:基于STM32 HAL库的IAP实战与架构设计
github5actions
博客等级 码龄1天 0粉丝 1824原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值