Skip to content

GoodbyeLina/STM32-LoRa-Rx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

相关项目


STM32F407 LoRa 接收终端 (RTOS 版)

🚀 系统架构升级 (v2.0 - RTOS)

本项目已完成从前后台轮询系统向 FreeRTOS 多任务架构的迁移。通过抢占式调度和任务解耦,显著提升了系统的实时性和可靠性。

1. 任务规划 (Task Management)

系统被划分为三个核心任务,通过优先级配置确保了通信的高优先级响应:

任务名称 优先级 堆栈大小 职责说明
TaskLoRa osPriorityHigh 512 Words 负责 SPI 射频接收、协议解析及串口转发,确保数据不丢失。
TaskLCD osPriorityNormal 1024 Words 负责 NT35510 屏幕渲染。利用阻塞机制减少 CPU 占用。
defaultTask osPriorityLow 128 Words 系统状态监控及空闲处理。

2. 任务间通信 (IPC)

采用 生产者-消费者 (Producer-Consumer) 模型:

  • 生产者 (LoRa Task):当 LoRa 模块接收到合法数据包并校验通过后,将数据封装进 LoRa_Packet_t 结构体,通过 osMessageQueuePut 发送。
  • 消费者 (LCD Task):平时处于 osWaitForever 阻塞状态(不占 CPU)。一旦队列收到数据,立即唤醒进行 UI 刷新。

graph TD subgraph "High Priority: TaskLoRa (Producer)" A[RF Data Received] --> B{CRC Check} B -- Pass --> C[Parse to Structure] C --> D[osMessageQueuePut] end

subgraph "Queue Buffer"
    D --> E[LoRaDataQueue]
end

subgraph "Normal Priority: TaskLCD (Consumer)"
    E --> F[osMessageQueueGet]
    F -- Data Ready --> G[Format String]
    G --> H[FSMC LCD Refresh]
    H --> F
end

style E fill:#f9f,stroke:#333,stroke-width:2px
style A fill:#dfd,stroke:#333
style H fill:#ddf,stroke:#333

3. 系统稳定性优化

  • 独立时钟源:将 HAL 库的 Timebase Source 切换至 Timer 1,避免与 FreeRTOS 的 SysTick 产生冲突。
  • 堆栈保护:针对 sprintf 浮点数处理在任务中容易溢出的问题,将 LCD 任务堆栈扩容至 4KB (1024 Words)
  • 资源解耦:利用 extern 关键字与模块化头文件管理,解决了多任务环境下全局变量重定义的冲突问题。

🛠 开发环境与配置更新

  • RTOS 内核: FreeRTOS V10.3.1 (CMSIS-RTOS V2)
  • 内存分配策略: Heap_4 (支持内存碎片管理)
  • 关键配置:
  • TOTAL_HEAP_SIZE: 32768 Bytes (F407 192KB RAM 冗余充足)
  • MINIMAL_STACK_SIZE: 128 Words

📸 运行效果

(此处可插入你刚才拍的那张照片,或者使用以下占位符)

RTOS 实时效果展示: 界面顶部实时显示心跳星号 *。即使在执行复杂的经纬度浮点运算时,LoRa 的接收闪烁也毫无卡顿,验证了高优先级任务的抢占成功。


下一个阶段的规划

  • 软件定时器: 移除任务内的 osDelay 闪灯,改用 FreeRTOS Software Timer 实现系统心跳。
  • 互斥锁 (Mutex): 引入互斥量保护串口 1,防止多任务并发打印导致的乱码。
  • 水位监测: 实现任务堆栈水位监测功能,防止长时间运行导致的内存溢出。

如何提交这些更新?

# 在 feat-freertos-migration 分支下
git add README.md
git commit -m "Docs: Update README to reflect RTOS architecture and task planning"
git push origin feat-freertos-migration

更新完 README 后,你的 GitHub 仓库就像一个成熟的开源项目了!你想不想尝试写一个简单的“堆栈水位监测”小功能?它可以帮你确认 1024 Words 的堆栈是否真的够用。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors