跳转至

40. 固件架构与 FreeRTOS 任务

40.1 学习目标

从程序入口追踪初始化、中断和 FreeRTOS 任务,知道速度命令在哪接收、电机在哪更新、状态在哪发送,自检失败又在哪阻止电机使能。

固件是存放在控制板中、上电后直接运行的程序。WHEELTEC 底盘常用的 STM32 是一系列MCU:它把处理器、存储器和串口、定时器等外设集成在一块芯片内,适合按固定周期读取传感器并控制电机。FreeRTOS 是面向微控制器的实时操作系统(Real-Time Operating System, RTOS),负责按优先级和周期调度多个任务。

40.2 适用范围

WHEELTEC STM32 底盘固件。不同控制板的外设和任务名会变化,本文讲职责,不假定函数名完全一致。

40.3 操作前检查

  • 只读当前匹配控制板的源码,不先改代码。
  • 保存工程、编译器版本和宏定义。
  • 能从源码恢复到出厂固件。

40.4 工作原理

初始化与任务调度

典型固件由启动初始化、周期任务和中断组成。中断会在外设事件发生时暂时打断当前任务,先处理接收数据或计时等紧急工作。串口/CAN 接收也可能使用DMA,让外设在较少占用处理器的情况下把数据写入内存。控制任务按周期更新运动学与 PI,传感器任务读取 IMU/编码器,通信任务发送状态,人机任务刷新 OLED、蜂鸣器和按键。

实时性取决于任务能否按约定周期及时运行。控制周期忽快忽慢会影响编码器测速、PI 参数和里程计积分;增加任务数量并不会改善实时性。

40.5 固件实验记录

STM32 串口、PWM 与编码器最小实验

这组三个实验把完整底盘固件拆成可观察的外设边界:先证明串口能收发,再证明定时器能输出 PWM,最后证明编码器能够计数和辨别方向。完成这些实验不等于完整底盘固件兼容,也不能据此形成烧录建议。

  1. 静态校对:只确认源码、目标芯片、引脚和计算关系;
  2. 历史构建:只证明某个旧环境曾经生成目标文件;
  3. 当前构建:证明当前工作副本在记录的工具链中编译通过;
  4. 实机验证:同一板卡、同一固件、同一接线下得到测量记录。

前三项都不能推出当前板卡适合烧录,也不能推出 C30D、C50 或 R680 兼容。本文不是独立固件或烧录教程;没有板卡匹配固件、原理图和回滚文件时,不得进入烧录步骤。

使用边界

本节使用教材代码仓库中的完整实验工程,不提供可直接烧录的固件文件。用于校对流程的基线工程面向 STM32F103C8T6 核心板,工程记录使用 Keil MDK 5.33、Arm Compiler 5.06 update 7 和 STM32F1 标准外设库。C30D、C50A/B/C、R680 或其他控制板的芯片、引脚、时钟、下载地址和电平可能不同,不能直接套用。

开始前必须记录:

项目 需要确认的内容
目标板 完整型号、MCU 丝印、供电电压和原理图版本
工程 目标芯片、启动文件、Flash/RAM 地址、库和编译器版本
下载 ST-Link/串口下载方式、SWD/BOOT 接线和可用回滚文件
测量 万用表或示波器量程、探头衰减、逻辑地连接
安全 电机断开或失能、急停可用、没有未知外设占用测试引脚

先核对板卡,再接线或烧录

PA0、PA9、PA10、PB6 和 PB7 只描述本文校对基线,不适用于未经核对的 C30D、C50 或 R680。若当前板卡原理图、MCU、匹配固件或现有接线不能确认,实验状态保持“待实机验证”,不要连接探头、串口模块、编码器或烧录工程。

每项实验开始前还要写下数值验收门槛,例如允许的逻辑电平、频率误差、静止计数和重复测量偏差。门槛来自当前芯片/板卡规格、时钟误差和仪器精度;“接近”“明显”或“偶尔”不能单独作为通过标准。普通验收失败应停止本项并排查,过压、发热、复位、机械运动等安全停止条件则应立即断电。

统一实验记录

字段 记录内容
实验 串口 / PWM / 编码器
板卡与 MCU 丝印、原理图版本、供电
工程基线 工程副本、目标芯片、编译器、库、提交或文件哈希
接线 MCU 引脚、外设端、地和电平
配置 串口帧格式 / TIM 时钟、PSC、ARR、CCR / 编码器模式
预期值 手算结果或预期字节/方向
实测值 串口记录、波形截图、计数和时间窗
偏差 偏差大小、可能边界和复测结果
验收门槛 逻辑电平、频率误差、静止计数、重复测量误差
安全状态 执行器是否失能、急停、供电和停止条件
结论 通过 / 失败 / 待实机验证

只有同一控制板、同一工程和同一接线下的实测记录才能支持“实验通过”。没有硬件测量时,结论必须写成“待实机验证”;不能把静态源码阅读、历史构建日志或文件名扩展为当前板卡可烧录、可运行或与 R680 兼容。

40.6 验收标准

  • 有一张命令到执行、反馈到上报的任务图。
  • 控制周期和测速周期明确。
  • 自检、急停、通信超时和电机失能路径可定位。
  • 共享变量的生产者、消费者和更新时机明确。

40.7 故障排查

现象 检查
偶发速度跳变 接收帧一致性、共享变量和任务周期
OLED 卡住但电机仍动 人机任务阻塞或优先级问题
通信正常但控制更新慢 控制任务延时、阻塞调用或优先级
自检偶发失败 初始化顺序、传感器稳定时间和电压

本章代码:固件证据记录

使用 stm32/labs/uart/stm32f103-stdperiph、stm32/labs/pwm/stm32f103-stdperiph 与 stm32/labs/encoder/stm32f103-stdperiph 的完整工程目录;本章只做静态核对。验收:记录 MCU、启动文件和工程文件;边界:无 Keil/Arm GCC 时不宣称构建或烧录。

章节导航

上一章:视觉建图与导航操作 · 返回本篇 · 下一章:硬件初始化、车型选择与接口