电赛 MSPM0G3507 小车控制 Skill(天猛星)
面向 2026 电赛的 TI MSPM0G3507(立创天猛星 LCKFB Tianmengxing)小车控制固件开发,适用于 Claude Code、Codex CLI 及其他兼容 agentskills.io / AGENTS.md 机制的 CLI Agent(Codex 经由仓库根 AGENTS.md 或 skills 目录加载)。覆盖两层:
- 工具链层:SysConfig
.syscfg+ DriverLib 的正确工作方式(继承自实板验证的 mspm0-skill,MIT)。 - 赛题层:电赛小车运动控制、传感器、视觉协作、固件架构、真题规律与 2026 器件清单约束。
默认工作流
- 定位项目入口:
.syscfg/system.syscfg、可编辑源码、生成的ti_msp_dl_config.h,以及 CCS 的targetConfigs/*.ccxml、Keil 的*.uvprojx、或 CMake 的CMakeLists.txt+ OpenOCD.cfg。 - 可用时运行
python scripts/check_syscfg.py <project-dir>做静态体检。 - 读
.syscfg元数据:device、package、SDK、SysConfig 版本、模块、实例、引脚、时钟、中断。 - 读生成的
ti_msp_dl_config.h,确认宏名、IRQ 名、实例名、init 函数拼写(如SYSCFG_DL_init())。 - 改动前先看现有
.syscfg、examples/*/manifest.json、TI SDK 示例;不确定的 SysConfig 字段不要发明。 - 只做最小必要的
.syscfg与应用代码修改,然后python scripts/run_sysconfig.py <project-dir>验证再编译。 - 涉及控制代码时,先确认定时来源(定时器 ISR / RTOS / 主循环轮询)再改周期或优先级。
- 烧录/调试前运行
python scripts/detect_probe.py,确认探针与项目配置一致,烧录后优先 System Reset。
核心规则(工具链)
.syscfg是 pinmux、外设、时钟、中断、DMA 归属的唯一事实来源;运行时行为写在应用代码里。- 不要手改生成产物:
ti_msp_dl_config.c/.h、device_linker.cmd、Objects/、Listings/、.out、map 文件。 - 不要猜生成名:宏、IRQ 名、init 拼写一律以本项目
ti_msp_dl_config.h为准。 - 不要发明 SysConfig 字段、枚举值、板名、工具版本;用本地示例、SDK 元数据或 SysConfig CLI 验证。
- 保留
.syscfg头部元数据(@cliArgs、--device、--package、--product等)。 - 未经用户确认不要更换 device、package、SDK、编译器、板卡或调试探针。
- SysConfig 有 warning 时要单独报告,不得称"干净通过";没在实板验证过就说明验证止于哪一层。
- ISR 内只做:清标志、最小工作、记录状态;共享变量用
volatile。禁止在 ISR 里阻塞串口、长延时、重解析。
天猛星特殊引脚
- PA21、PA23、PA02、PA18:板卡文档标记为特殊引脚,常规分配避开,除非用户点名或项目已有意使用。
- PA10/PA11:板载默认 UART(PA10 TX / PA11 RX)。选 UART 引脚时优先它们;但用作 GPIO/PWM/SPI/I2C 等非 UART 功能前要提醒会顶掉默认串口。
- 已验证时钟基线:HFXT 40 MHz(PA5/PA6)+ SYSPLL → CPUCLK 80 MHz,MFCLK 4 MHz。改完 CPUCLK 必须重新核对生成的定时器装载值。
- 详见
references/hardware_validation_notes.md(实板验证记录)。
车控开发规则
- 控制节拍:所有闭环跑在固定周期定时器 ISR 节拍上(验证基线:TIMG12 1 ms tick),禁止用
delay_cycles()做控制定时。 - 单位约定:全程 SI(m、m/s、rad);编码器计数在采样处一次性换算,不要让裸计数渗进控制层。
- 上电安全:
SYSCFG_DL_init()之后立即让电机输出为零(含 STBY/EN 拉低),一键启动前不得动。 - 编码器方向验证:每次接线/换电机后,手推车轮验证计数方向,统一"前进为正"再谈闭环。
- PID 整定顺序:电机死区标定 → 速度内环 → 转向/循迹外环 → 整题联调。跳步必翻车。
- 视觉/无线数据超时:串口帧 100–200 ms 无更新即进入丢失态(减速停车或保持搜索),禁止拿旧坐标继续闭环。MaixCAM 是 Linux 系统:开机十秒级、需开机自启应用、MCU 以心跳帧判定视觉就绪。
- 赛题硬规范:声+光同时提示、一键启动、只按一次复位、独立电源开关+供电指示 LED、MSPM0 芯片裸露可查验、车外不得有任何设备。逐条见
references/contest-playbook.md。
2026 器件清单速查
来自 2026 年电赛器件清单(全文见 references/contest-playbook.md):
| 关键条目 | 约束/信号 |
|---|---|
| 电动小车 | 长≤35 cm、宽≤25 cm;禁履带、禁麦克纳姆轮(具体题目往往更严,按 25×15 cm 级设计最稳) |
| TI MSPM0 系统板 | 清单唯一点名的 MCU;2024 起车题指定 MSPM0 且需暴露芯片查验 |
| 摄像头(可带处理器模块) | MaixCAM/OpenMV/K210 一体机合法(本队用 MaixCAM Pro / MaixCAM2);注意个别题禁摄像头 |
| 无线图传模块、短距离无线通信模块 | 双机协同 / 手机遥测 / 远程监视考点 |
| 小型电磁铁 + 钢球(直径约1 cm) | 吸附/搬运类任务信号 |
| 光电传感器、角度传感器 | 循迹与姿态底座 |
| 显示屏(≥6 吋)、7 段数码管 | 装置/地面站 UI 考点 |
参考文档选择
按需读取,不要全量加载:
| 文件 | 什么时候读 |
|---|---|
references/motion-control.md |
电机驱动、PWM、编码器测速、PID、差速、循迹、坡道、精确停车、盲区导航 |
references/sensors-actuators.md |
灰度、MPU6050、超声/ToF、舵机云台、蜂鸣器/LED/语音、OLED 菜单、无线模块、电磁铁 |
references/vision-protocol.md |
视觉板(本队为 MaixCAM Pro / MaixCAM2)分工与 MaixPy 串口、开机日志与供电坑、帧协议、解析状态机、云台打靶/追踪、激光+感光纸 |
references/firmware-architecture.md |
工程分层、1 ms 调度、主状态机、分段路径脚本、参数整定、外设资源规划、可靠性 |
references/contest-playbook.md |
真题规律、2026 器件清单全文与解读、双车搬运押题预案、备赛训练项目、赛题日流程 |
references/project_workflows.md |
.syscfg 编辑细节、CCS/Keil/CMake 布局、SysConfig CLI、构建、烧录 |
references/driverlib_runtime_rules.md |
DriverLib API、中断、时钟与延时、常见运行时错误 |
references/hardware_validation_notes.md |
天猛星实板验证:80 MHz 时钟、UART DMA、PWM、1 ms 定时器的已验证细节 |
references/debug_backends.md |
CCS-DSS 与 OpenOCD/GDB 调试、探针故障排查 |
示例与片段
examples/:天猛星实板验证过的最小示例(LED、PWM 呼吸灯、1 ms 定时器中断、UART 阻塞 TX、双 UART DMA TX + IRQ RX)。用python scripts/list_examples.py查看。示例是"已证明的参考",不是必须照搬的模板——尊重用户项目自己的结构。assets/snippets/:可直接比对的.syscfg片段(80 MHz 时钟树、GPIO、1 ms 定时器、UART 两种形态、空工程脚手架)。- 车控外设(电机 PWM、编码器、ADC 多通道、I2C)没有预置
.syscfg片段:按references/motion-control.md给出的模块与字段要求在 SysConfig 里配置,再用run_sysconfig.py验证,不要凭空手写。
工具脚本
Python 3.10+。serial_console.py 需要 pyserial。
python scripts/check_syscfg.py <project-dir>:项目静态体检(加--probe一并检查探针)。python scripts/run_sysconfig.py <project-dir>:隔离目录中验证.syscfg,不覆盖项目产物。python scripts/detect_probe.py:只读探测 CMSIS-DAP/DAPLink、J-Link、XDS110、ST-Link。空结果=不确定,不是没插。python scripts/serial_console.py -p COM6 -b 115200 --timestamp:串口观察;--send/--send-hex可发测试帧(先关 VOFA+ 等占用串口的工具)。python scripts/index_syscfg_examples.py <sdk-root> --board LP_MSPM0G3507 --module UART:检索本地 TI SDK 示例与元数据。python scripts/ccs_dss_debug.py/python scripts/openocd_debug.py:两套调试后端,见references/debug_backends.md。
烧录与调试
- 模糊的"帮我烧录"请求:先
detect_probe.py,多探针/未知/配置冲突时停下来问,不要默认 J-Link。 - 已验证 CCS 路径:DSLite/UniFlash + J-Link,时钟树改动后用
dslite -c <target.ccxml> -e -r 2 -u <project.out>(System Reset)。 - 现象速查:
delay_cycles(80000000)约 2.5 s → 程序跑在 32 MHz,按复位或用-r 2烧录。 - 目标疑似被锁时停止操作,让用户执行手动解锁流程;实时控制硬件上打断点前先说明会停车。