菜单

uwidjw
uwidjw
发布于 2025-11-21 / 29 阅读
2
1

项目综述与架构设计

项目背景

大二时候实验室为了申报一个新苗项目,需要制作一个低功耗的农场遥测数据传感器节点,需要的是实现低功耗数据采集与发送,最好还能够实现对服务器下发的 RPC 命令的响应。第一版制作代码非常粗糙,一个几乎可以认为完全不存在鲁棒性的系统。当时使用 STM32F103C8T6 搭配标准库进行开发(经典),其中最深入的技术是完成了串口的空闲中断,实现了对不定长数据包的接收。

后面这个项目被搁置了一段时间,在大三上的一门提前做课设《网络综合应用实训》时又被拉出来了,此时萌发了想要认真重新重构这个项目的想法,准备使用 STM32U575 作为主控进行开发,在资源充足的平台上完成开发后再尝试迁移到 L051 等低成本的低功耗 MCU。

硬件选型

  • 主控:STM32U575VGT6(Cortex-M33)

  • LoRa 模块:亿佰特 E220-400T22D

  • 传感器:SHT30(温湿度传感器)+BH1750(光照强度传感器)+BMP388(气压传感器)

软件架构

大二的暑假尝试看野火的 RTOS 课程,看不进去;大二下尝试使用 FreeRTOS 制作机设的电机控制系统,仍然是失败。大三上拜读了经典的《ARM Cortex-M3 Cortex-M4 权威指南》,从 ARM 结构的 RTOS 支持特性开始学习,终于是能够理解 RTOS 内核的基础原理,最终选择这个 U575 的项目作为 RTOS 的练手项目。原因是这个项目的流程较为简单,只需要完成“测量数据 - 发送数据”的流程即可,学习路径不陡峭;另外最开始有开发完成后迁移到 L051 的想法,迁移到资源有限的 MCU 上可以快速锻炼我的 RTOS 调优能力,比如通过水印获取最大使用栈大小等。

最终确定使用的技术栈为:

FreeRTOS(CMSIS OS2) + LPDMA + SRAM4 + STOP2

软件使用分层设计:

BSP->Interface->APP

Gemini_Generated_Image_set5j9set5j9set5.png

(Nano Banana Pro 真是太好用了)

成果展示

打开 DEBUG 控制宏之后系统的 SWO 输出

使用串口读取 LoRa 模块接收到的遥测数据

测试系统接收命令的 SWO 输出

  • 最终系统实现了全链路零拷贝、死机自愈和低功耗功能



评论