Engineering Portfolio
STM32 + FreeRTOS 多任务采集终端
面向传感器采集、串口通信和状态显示的嵌入式多任务项目记录模板。
项目背景
这个页面用于承接后续 STM32 与 FreeRTOS 实验,目标是把零散外设例程整理为一个有明确任务边界、通信协议和调试记录的完整终端项目。
功能目标
- 周期采集 ADC 或 I2C 传感器数据。
- 使用 DMA 完成串口收发。
- 用队列在采集任务与通信任务之间传递数据。
- 记录任务运行状态、堆栈余量和异常信息。
硬件与软件环境
- STM32 Cortex-M 开发板,具体型号随实物确定。
- STM32CubeMX / STM32CubeIDE。
- FreeRTOS、HAL 驱动与串口调试工具。
系统架构
采集任务只负责按周期产生数据;处理任务完成滤波和格式化;通信任务封装协议并驱动 UART DMA;监控任务检查心跳、堆栈和错误状态。
实现步骤
- 完成时钟树与基础外设配置。
- 先在裸机循环中验证传感器和串口。
- 引入 FreeRTOS 任务、队列和软件定时器。
- 将阻塞串口替换为 DMA 和事件通知。
- 增加压力测试与故障注入记录。
核心代码说明
任务之间只传递明确的数据结构,不共享可变全局缓冲区。中断服务程序只发通知,不执行字符串格式化等耗时工作。
if (xQueueSend(sampleQueue, &sample, 0) != pdPASS) {
droppedSamples++;
}
调试过程
按“外设裸机验证、单任务验证、多任务联调、长时间运行”四个阶段推进,并记录每阶段的 CPU 占用、队列峰值和最小剩余堆栈。
遇到的问题
预计重点关注任务优先级反转、DMA 缓冲区竞争、队列阻塞和串口突发数据丢失。
解决方案
使用互斥量的优先级继承、双缓冲、有限等待时间和明确的溢出计数;所有推断在实测后更新到实验日志。
最终效果
当前为项目结构与验收模板,尚不标记为已完成。后续将补充原理图、CubeMX 配置、核心源码、串口抓包和实物视频。
后续改进
可扩展 OLED 显示、Flash 参数保存、Bootloader 和低功耗模式。