← 返回项目作品

Engineering Portfolio

STM32 + FreeRTOS 多任务采集终端

面向传感器采集、串口通信和状态显示的嵌入式多任务项目记录模板。

项目背景

这个页面用于承接后续 STM32 与 FreeRTOS 实验,目标是把零散外设例程整理为一个有明确任务边界、通信协议和调试记录的完整终端项目。

功能目标

  • 周期采集 ADC 或 I2C 传感器数据。
  • 使用 DMA 完成串口收发。
  • 用队列在采集任务与通信任务之间传递数据。
  • 记录任务运行状态、堆栈余量和异常信息。

硬件与软件环境

  • STM32 Cortex-M 开发板,具体型号随实物确定。
  • STM32CubeMX / STM32CubeIDE。
  • FreeRTOS、HAL 驱动与串口调试工具。

系统架构

采集任务只负责按周期产生数据;处理任务完成滤波和格式化;通信任务封装协议并驱动 UART DMA;监控任务检查心跳、堆栈和错误状态。

实现步骤

  1. 完成时钟树与基础外设配置。
  2. 先在裸机循环中验证传感器和串口。
  3. 引入 FreeRTOS 任务、队列和软件定时器。
  4. 将阻塞串口替换为 DMA 和事件通知。
  5. 增加压力测试与故障注入记录。

核心代码说明

任务之间只传递明确的数据结构,不共享可变全局缓冲区。中断服务程序只发通知,不执行字符串格式化等耗时工作。

if (xQueueSend(sampleQueue, &sample, 0) != pdPASS) {
    droppedSamples++;
}

调试过程

按“外设裸机验证、单任务验证、多任务联调、长时间运行”四个阶段推进,并记录每阶段的 CPU 占用、队列峰值和最小剩余堆栈。

遇到的问题

预计重点关注任务优先级反转、DMA 缓冲区竞争、队列阻塞和串口突发数据丢失。

解决方案

使用互斥量的优先级继承、双缓冲、有限等待时间和明确的溢出计数;所有推断在实测后更新到实验日志。

最终效果

当前为项目结构与验收模板,尚不标记为已完成。后续将补充原理图、CubeMX 配置、核心源码、串口抓包和实物视频。

后续改进

可扩展 OLED 显示、Flash 参数保存、Bootloader 和低功耗模式。