- 博客(296)
- 收藏
- 关注
原创 嵌入式故障码管理系统设计实现
在嵌入式系统开发中,故障管理是保障系统稳定运行的关键一环。当系统出现异常时,及时准确地记录和处理故障信息,不仅有助于快速定位问题,还能为系统的优化和维护提供重要依据。本文将基于一套实际的嵌入式故障码管理系统代码,详细介绍其设计思路与实现方法。
2025-05-17 00:00:00
1282
原创 Modbus RTU 详解 + FreeMODBUS移植(附项目源码)
本文全面解析Modbus RTU通信协议,详细介绍其报文格式、功能码定义及典型应用场景,并手把手指导如何将FreeMODBUS协议栈移植到嵌入式平台。内容涵盖从底层硬件驱动配置、协议栈移植到主机/从机通信测试的全流程,重点讲解移植过程中的常见问题及解决方案。文章最后提供经过实测的完整项目源码,帮助开发者快速实现稳定的Modbus RTU通信功能。
2025-05-09 22:05:44
1281
原创 嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)
本文提供uC/OS-III实时操作系统的完整移植指南,涵盖源码配置、工程搭建到任务调度的全流程。针对移植中的常见编译错误,给出关键修改方案(如中断重定义、配置使能等),附已验证的工程源码,通过LED任务实验验证稳定性,帮助开发者高效完成移植。适合嵌入式工程师及RTOS学习者参考。
2025-04-29 00:02:21
909
原创 基于“Bootloader + 双APP”分区的嵌入式固件升级系统
本文将详细介绍一种高可靠性的嵌入式固件升级方案,通过双APP分区设计和严谨的状态管理,确保了升级过程的安全性和可靠性。该方案具有以下优点:支持安全回滚,升级失败不影响系统运行完整的错误检测和处理机制优化的内存使用和性能表现清晰的升级状态管理易于移植到不同硬件平台
2025-04-24 01:31:31
1043
原创 嵌入式设备网络的动态ID分配机制实现
在嵌入式设备网络中,节点的动态加入与退出是常态,尤其是在无人机、传感器网络、智能家居等系统中,节点通常无法提前预设 ID,这就要求系统具备动态 ID 分配与管理能力。本篇博客将围绕“动态 ID 管理”这一核心,介绍一个基于设备 UID 的动态 ID 分配系统,支持重复上线检测、最小可用 ID 分配、ID 冲突检测、ID 释放与复用等功能,代码完全由 C 语言实现,结构清晰,易于移植与扩展。灵活性:支持动态ID分配和释放可靠性:通过心跳机制确保节点状态准确可扩展性:易于添加新功能如安全验证等低开销。
2025-04-18 21:30:28
1188
原创 基于查表法的 CRC8 / CRC16 / CRC32校验解析
在嵌入式开发中,CRC(Cyclic Redundancy Check)循环冗余校验算法广泛应用于通信数据校验、Flash 数据完整性检测、Bootloader 升级验证等场景。本文将深入剖析一套完整的 CRC8、CRC16 和 CRC32 实现,并通过查表法(Table Lookup Method)提升运算效率。
2025-04-12 19:21:13
984
原创 为什么在MCU开发中少见用malloc动态内存分配?
在嵌入式开发中,尤其是在资源受限的 MCU(微控制单元)项目里,很多初学者会有一个疑问:“为什么大家都在避谈 malloc(),甚至在代码规范中直接禁止使用动态内存分配?”今天我们就来深入探讨这个问题。虽然在一些高级处理器或 Linux 系统下使用 malloc() 是常态,但在资源受限、要求高稳定性的 MCU 中,我们更倾向于使用静态分配、内存池或固定策略来管理内存。
2025-04-10 03:00:00
668
2
原创 基于队列构建优先级抢占机制的LED灯框架设计与实现
在嵌入式系统中,RGB LED状态指示常用于设备运行状态、故障信息或工作模式的直观提示。在多个状态同时存在的情况下,我们希望能让更紧急或重要的状态信息抢占当前的LED显示内容,同时又能保留各状态的独立性和易于扩展的逻辑。本文将详细解析该LED显示框架的设计思路、核心组件及其实现方式,并对关键代码进行深入剖析,帮助读者理解如何在嵌入式系统中高效地管理LED状态显示。它具有以下核心特性:✅ 支持多个状态模块✅ 支持不同状态的优先级判断✅ 状态判断函数独立,便于维护✅ 状态优先级支持抢占式切换。
2025-04-09 22:35:05
910
原创 基于 SysTick 定时器实现任务轮询调度器
在嵌入式系统中,对于资源受限、实时性要求较强的小型项目,使用一个轻量级的轮询调度器(Polling Scheduler)往往是比使用完整 RTOS 更合适的选择。本文将介绍如何基于 SysTick 定时器,构建一个简单、可配置、易于维护的任务轮询调度框架。**轮询调度器**是一种按照固定频率循环调用多个任务的调度方式。与传统的 RTOS 使用任务优先级和时间片管理不同,轮询调度器结构简单,没有上下文切换开销,适用于嵌入式裸机系统。
2025-04-09 21:43:28
899
原创 基于PX4和Ardupilot固件下自定义MAVLink消息测试(QGroundControl和Mission Planner)
在无人机行业,MAVLink(Micro Air Vehicle Link)协议已经成为了通信的标准协议。MAVLink协议定义了一种轻量级的消息传输格式,广泛应用于PX4和ArduPilot等开源无人机飞控固件中。通过自定义MAVLink消息,我们可以为无人机添加特定功能或扩展现有功能。本文将详细介绍如何在PX4和ArduPilot固件下自定义MAVLink消息,并使用QGroundControl和Mission Planner进行测试。
2025-04-01 00:00:00
823
原创 在MCU工程中优化CPU工作效率的几种方法
在嵌入式系统开发中,优化 CPU 工作效率对于提升系统性能、降低功耗、提高实时性至关重要。Keil 作为主流的嵌入式开发工具,提供了多种优化策略,包括 关键字使用、内存管理、字节对齐、算法优化 等。本文将从多个方面介绍如何在 Keil 工程中优化 CPU 运行效率。
2025-03-31 00:00:00
2454
1
原创 基于多链路的命令表驱动设计
在嵌入式系统开发中,尤其是涉及多链路通信的应用场景(如串口、SPI、以太网等),需要设计一种高效的方式来解析和处理不同链路上的多条命令。本文介绍了一种基于命令表驱动法的设计方式,通过命令查找表(Command Lookup Table)和链路管理表(Channel List)实现高效的命令分发。
2025-03-30 03:35:32
602
原创 一种基于编译期实现的 MCU 固定地址数据存储方法
在嵌入式开发中,有时我们需要在 Flash 指定地址存储特定的标志位或常量数据,例如 Bootloader 标志、固件版本信息、校验码等。这时,可以使用 `__attribute__((at(addr)))` 关键字,将变量固定存放在指定的 Flash 地址。
2025-03-23 15:14:34
1083
原创 HardFault全解析:从寄存器诊断到精准定位
HardFault硬故障错误中断是 ARM Cortex-M 系列微控制器中一个较为严重的错误中断,一旦触发,表明系统遇到了无法由其他异常处理机制解决的问题。内存访问错误、总线错误、堆栈溢出或损坏、异常处理错误、指令执行错误、硬件故障等
2025-03-21 23:01:13
1186
原创 嵌入式内存管理之“LittleFS文件系统”开发(附LittleFS项目源码)
本文介绍了如何在嵌入式系统中实现 LittleFS 文件系统,并结合 Flash 存储进行数据管理。通过详细的代码示例,展示了如何配置、挂载 LittleFS 文件系统,并进行文件操作,如读取、写入和更新数据。特别地,博客通过实际应用演示了如何实现启动计数功能,以及如何处理文件系统的格式化和挂载过程。该示例帮助读者掌握在资源受限的嵌入式环境中实现高效文件存储管理的关键技术。
2025-03-09 18:02:45
1500
2
原创 全网最详细的UAVCAN/DroneCAN链路开发(官方DroneCAN消息+自定义DroneCAN消息)附DroneCAN项目源码
全网最详细的UAVCAN/DroneCAN链路移植开发(官方DroneCAN消息+自定义DroneCAN消息)附工程移植源码
2025-03-06 23:43:48
1144
3
原创 MAVlink链路开发(环境搭建+工程移植)
MAVlink链路常用于云台相机与飞控以及地面站之间的数据传输,搭建MAVlink链路环境需要安装**Python、Future、MAVLink、pymavlink**四样工具用于生成mavlink代码,若下载或运行中出现`No module named ‘xxx’`,即为某项下载失败,可能是由于`pip`工具版本与python版本不兼容,更新pip版本即可,在命令行中输入“`python -m pip install --upgrade pip`”,等待更新完成,然后重新下载即可
2025-02-28 21:37:18
535
原创 UAVCAN/DroneCAN通讯收发示例
UAVCAN/DroneCAN链路开发,UAVCAN/DroneCAN是基于CAN通讯上的一种封装协议,常用于无人机飞行器领域。
2024-12-28 18:12:31
1320
原创 唯一设备序列号(UID)、唯一产品识别码(UPI)和备份寄存器BKP
(Unique Customer ID),这两个设备序列号存放在闪存存储器的系统配置块中,它们所包含的信息在出厂时编写,并保证对任意一个 MCU 微控制器在任何情况下都是唯一的,用户应用程序或外部设备可以通过CPU 或 JTAG/SWD 接口读取,不可被修改。在实际软件开发中,有一些数据你希望保存在mcu中,不被轻易擦除更改,可能你第一想到的是内部Flash,但当系统重新烧录时flash里面的数据会被覆盖或者擦除,这是你不愿看到的,所以这里我给大家介绍一个寄存器来存储少量数据,不易丢失。
2024-11-24 16:12:36
1644
原创 bootloader固件升级开发原理
在实际企业中,对产品进行软件上的更新迭代,不再会像你在学校里头用st-link或者j-link等烧录器对单片机进行直接擦写,而是会将一个产品编写两套代码(Bootloader和APP),APP是你对产品实际需要设计的代码,Bootloader则是用于给APP代码做引导写入到单片机的指定地址。
2024-09-21 21:34:35
1411
原创 雅特力AT32 闪存零等待区(ZW)和非零等待区(NZW)
在支持零等待区(ZW)的MCU型号中,可以在程序设计时将不能失速的重要代码放在零等待区(ZW),需要频繁擦写的内容放在非零等待区(NZW),利用非零等待区(NZW)的擦写和零等待区(ZW)的读取可以同时执行的特性实现所需的实时功能。
2024-07-22 14:55:44
1599
原创 如何制作一款最基础的物联网开发板
这里我选取市面上最常用的STM32作为试验绘制,我用的嘉立创进行PCB绘制,所以如下都是以嘉立创下的环境进行分析处理。创建工程,开始绘制。
2024-05-30 21:45:49
638
1
原创 基于OpenMV 双轴机械臂 机器学习
以摄像头左上角为坐标原点建立坐标系,通过识别目标物块 获取物块的中心坐标点位,以识别到的点位作为实际点位,摄像头的中心坐标作为目标点位,引用PID算法分别在x轴和y轴上设计两套位置闭环,将输出信号赋给舵机,使其收敛于目标点位。两套二维云台设备,Device1通过摄像头捕捉目标物块点位进行实时追踪,再将自身点位传到Device2,Device2学习Device1动作,控制误差
2024-04-28 15:01:50
2281
2
原创 基于四足机器人和机械臂的运动控制系统(一)
本项目旨在设计和实现一种基于四足机器人和机械臂的运动控制系统,以提高机器人在不同环境中的适应性和任务执行能力。探索传感器融合、路径规划、运动控制算法等关键技术,以实现机器人的高效定位、平衡控制、障碍物避障、物体抓取等功能。通过在实际场景中的实验验证,将评估所提出系统的性能和效果,并与现有的相关研究进行比较
2024-02-19 20:56:55
2957
2
原创 小学生都会搓的系统板【画PCB-->布线 -->制版-->焊接-->验板】
在大学嵌入式相关专业,有许多同学是更偏向软件上的设计,并不懂硬件上的实现,而当在面临就业时,经常会被一些面试官问到你硬件上的盲区,为在有限的时间里有高质量的提升,这里我以的。
2024-01-27 19:23:54
2009
原创 解决 rtthread.elf section `.text‘ will not fit in region `ROM‘ ,region `ROM‘ overflowed by 10136 bytes
rtthread.elf section `.text' will not fit in region `ROM' ,region `ROM' overflowed by 10136 bytes。也就是说该项目大小已经超过了本身Flash大小,我这里用的芯片是STM32F103C8T6,Flash为64k,即已大于64k。也就是选用Flash更大的芯片。
2024-01-15 13:59:32
2583
原创 各红外线通信协议解码(通用型)【NEC、Sony SIRC、RC-5、RC-6、Samsung】
红外线通信协议解码是指将接收到的红外线信号转换为可理解的数字数据,以便对其进行进一步处理和操作的过程。红外线通信协议解码通常用于遥控器接收器等设备中。在红外线通信中,遥控器发送器使用特定的红外线协议来编码命令和数据,并通过红外线发射器将这些信息转换为红外线信号。接收器捕获这些红外线信号,并通过解码过程将其还原为原始的命令和数据。NEC、Sony SIRC、RC-5、RC-6、Samsung等
2024-01-09 21:19:53
9980
4
原创 RT-Thread使用SystemView调试分析
SystemView是一个用于可视化分析任何嵌入式系统的工具包。SystemView提供了对应用程序的完整洞察,以获得对运行时行为的深刻理解,远远超出了调试器所提供的。当在具有多个任务和事件的复杂系统中开发和工作时,这是特别有利的。
2023-12-21 20:30:16
1851
2
原创 RT-Thread 三步实现利用DMA进行串口发送
想要使用串口的DMA发送,需要在board.h打开相关宏定义在串口驱动文件drv_usart.c中可以发现关于dma操作的函数只有两个,所以只需要删除两句函数开头的static关键字。
2023-12-05 08:00:00
1777
原创 RT-Thread 汇编分析启动流程
直到“b LoopCopyDataInit”,即跳转到标签LoopCopyDataInit 执行。直到b LoopFillZerobss,即跳转到标签LoopFillZerobss执行。直到bl SystemInit,即跳转到标签SystemInit执行,并在执行后返回此处。执行完后,返回到LoopFillZerobss 标签,继续执行bl entry。执行完后,返回到LoopFillZerobss 标签,继续执行bx lr。这里介绍即几条最常见实用的汇编指令。
2023-12-04 08:00:00
1049
原创 RT-Thread ADC_DMA
看到这里,相信大家已经尝试过网上各类ADC_DMA传输的文章,且大多都并不能实现,因为在RT-Thread中并没有找到关于ADC的DMA接口,在官方例程中有关DMA的传输也只有一个串口接收的介绍,找遍全网怕也没能找到真正有用的消息。在我成功实现ADC_DMA之前,也是和大家一样,到处寻找相关消息以及求助ChatGPT,可想而知,把希望寄托于别人倒不如自己去摸索,这样自己更能知道缺什么做什么。。。不多说了,请往下看。
2023-12-03 08:00:00
2005
原创 VL53-400激光测距传感器
先由激光二极管对准目标发射激光脉冲。经目标反射后激光向各方向散射。部分散射光返回到传感器接收器,被光学系统接收后成像到雪崩光电二极管上。雪崩光电二极管是一种内部具有放大功能的光学传感器,因此它能检测极其微弱的光信号。记录并处理从光脉冲发出到返回被接收所经历的时间,即可测定目标距离。该模块部分商家已取消IIC协议,串口默认配置为115200、8数据位、1停止位、无校验位。时会出现激光穿透现象,即回收不到数据。
2023-12-02 16:42:45
1212
原创 嵌入式基础电路设计和常用芯片用法
按键电路、晶振电路、降压电路及SN74HC244PWR、TLP2362、ACS724、LM358、EL357-NB、SMBJ30CA芯片介绍
2023-12-01 19:59:12
4531
原创 机器人AGV小车避障传感器测距
该模块是基于机器人自动控制应用而设计的,针对目前市场上对于超声波传感器模组盲区大、测量角度大、响应时间长、安装适配性差等问题而着重设计。具备了盲区小、测量角度小、响应时间短、过滤同频干扰、体积小、安装适配性高、防尘防水、寿命长、可靠性高等一系列优点。
2023-11-30 16:29:24
2312
原创 RT-Thread 线程间通信【邮箱、消息队列、信号】
当有新的消息到达时,挂起的线程将被唤醒以接收并处理消息。创建消息队列时先从对象管理器中分配一个消息队列对象,然后给消息队列对象分配一块内存空间,组织成空闲消息链表,这块内存的大小 =[消息大小 + 消息头(用于链表连接)的大小]X 消息队列最大个数,接着再初始化消息队列,此时消息队列为空。发送紧急消息的过程与发送消息几乎一样,唯一的不同是,当发送紧急消息时,从空闲消息链表上取下来的消息块不是挂到消息队列的队尾,而是挂到队首,这样,接收者就能够优先接收到紧急消息,从而及时进行消息处理。
2023-11-24 08:00:00
4101
原创 RT-Thread 线程间同步【信号量、互斥量、事件集】
同步是指按预定的先后次序进行运行,线程同步是指多个线程通过特定的机制(如互斥量,事件对象,临界区)来控制线程之间的执行顺序,也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间将是无序的。多个线程操作 / 访问同一块区域(代码),这块代码就称为临界区,上述例子中的共享内存块就是临界区。线程互斥是指对于临界区资源访问的排它性。当多个线程都要使用临界区资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。
2023-11-23 08:00:00
1507
原创 RT-Thread Hoist_Motor PID
具体实控例如在50Hz情况下,即周期为20ms①驱动信号区间: 区间一(0.5ms-1.5ms )和区间二(1.5ms-2.5ms ) (注意都是开区间且存在死区)②其中区间一和区间二分别表示不同的方向运动,例区间一表示正方向,则区间二表示反方向。③旋转速度呈现为“ V ” 字形,即0.5ms和2.5ms分别表示为正反方向的最快速度,1.5ms左右分别表示正反方向的最慢速度。其中小于等于0.5ms时、1.5ms时和大于等于2.5ms时电机都保持停转状态。电调引线。
2023-11-22 08:00:00
544
瑞萨RA6M5-FSP-Qt遥控小车.zip
2023-06-12
STM32F103红外循迹小车
2023-05-05
STM32-读写RFID.zip
2023-05-05
mpu6050姿态解算(陀螺仪).zip
2023-05-05
GY-39(IIC).zip
2023-05-05
基于STM32 蓝牙双机通信.zip
2023-05-05
stm32-五线四相步进电机.zip
2023-05-05
stm32-qt遥控小车.zip
2023-05-05
MSP430驱动函数库
2023-03-14
IAR for MSP430 7101
2023-03-11
C语言/C++常见笔试面试题难疑点汇总
2023-02-27
STM32-BH1750+OLED
2023-02-25
ESP8266WiFi模块
2023-02-25
MQ-2烟雾浓度传感器.zip
2022-11-17
5.0步进电机绝对定位+梯形加减速.zip
2022-11-17
12864OLED液晶屏
2022-11-17
对射式红外传感器模块、测速传感器模块、计数器模块、电机测试模块、槽型光耦模块
2022-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人