# Nuedc Mspm0 Car

> Use when developing NUEDC (全国大学生电子设计竞赛/电赛) firmware on TI MSPM0G3507 or LCKFB Tianmengxing (天猛星) boards — smart car motion control (电机PWM/编码器/PID/循迹/坡道/精确停车/盲区导航), MPU6050 IMU heading, gray-scale sensors, servo gimbal + laser targeting, MaixCAM Pro/MaixCAM2 (MaixPy) or OpenMV/K210 vision UART protocol, dual-device wireless coordination, .syscfg/SysConfig editing, Keil/CCS/CMake builds, flashing/debugging, or analyzing 电赛小车/视觉赛题 and 器件清单 constraints.

- Skill: `dvoid128/nuedc-mspm0-car` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add dvoid128/nuedc-mspm0-car`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvoid128/nuedc-mspm0-car/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Dvoid128 (https://skillmd.com/u/dvoid128)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/dvoid128/nuedc-mspm0-car

---


# 电赛 MSPM0G3507 小车控制 Skill（天猛星）

面向 2026 电赛的 TI MSPM0G3507（立创天猛星 LCKFB Tianmengxing）小车控制固件开发，适用于 Claude Code、Codex CLI 及其他兼容 agentskills.io / AGENTS.md 机制的 CLI Agent（Codex 经由仓库根 `AGENTS.md` 或 skills 目录加载）。覆盖两层：

1. **工具链层**：SysConfig `.syscfg` + DriverLib 的正确工作方式（继承自实板验证的 mspm0-skill，MIT）。
2. **赛题层**：电赛小车运动控制、传感器、视觉协作、固件架构、真题规律与 2026 器件清单约束。

## 默认工作流

1. 定位项目入口：`.syscfg` / `system.syscfg`、可编辑源码、生成的 `ti_msp_dl_config.h`，以及 CCS 的 `targetConfigs/*.ccxml`、Keil 的 `*.uvprojx`、或 CMake 的 `CMakeLists.txt` + OpenOCD `.cfg`。
2. 可用时运行 `python scripts/check_syscfg.py <project-dir>` 做静态体检。
3. 读 `.syscfg` 元数据：device、package、SDK、SysConfig 版本、模块、实例、引脚、时钟、中断。
4. 读生成的 `ti_msp_dl_config.h`，确认宏名、IRQ 名、实例名、init 函数拼写（如 `SYSCFG_DL_init()`）。
5. 改动前先看现有 `.syscfg`、`examples/*/manifest.json`、TI SDK 示例；不确定的 SysConfig 字段不要发明。
6. 只做最小必要的 `.syscfg` 与应用代码修改，然后 `python scripts/run_sysconfig.py <project-dir>` 验证再编译。
7. 涉及控制代码时，先确认定时来源（定时器 ISR / RTOS / 主循环轮询）再改周期或优先级。
8. 烧录/调试前运行 `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` 烧录。
- 目标疑似被锁时停止操作，让用户执行手动解锁流程；实时控制硬件上打断点前先说明会停车。

