# HPM_APP_WORKSPACE **Repository Path**: LCF228/hpm_app ## Basic Information - **Project Name**: HPM_APP_WORKSPACE - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-17 - **Last Updated**: 2026-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HPM SDK 工程模板 基于 **HPM_SDK** 的 VS Code 命令行工程脚手架:一份模板生成多个工程,支持**一键切换** Board / BuildType / Probe,所有构建/烧录通过 VS Code 任务或命令行完成,**不依赖任何 IDE 工程文件**。 > 📥 **官方 SDK 环境下载**(先河 sdk_env 整包,含 toolchain / cmake / ninja / openocd / python): > 百度网盘: 提取码:`hp11` > 下载后解压到任意目录(建议 `F:\MCU\HPM\sdk_env_v1.11.0\`)。 --- ## 1. 目录结构 ``` / ├── .vscode/ # VS Code 任务、调试、智能感知配置(无需手动改) │ ├── tasks.json # 9 个 HPM: 任务(Build/Flash/Configure/...) │ ├── launch.json # OpenOCD 调试配置 │ ├── settings.json │ └── c_cpp_properties.json ├── app/ │ ├── inc/ # 工程私有头文件 │ └── src/ # 工程源码(main.c 在这里) ├── board/ # (可选)本地化的板级支持包,覆盖 SDK 同名 board ├── linker/ # (可选)本地化的链接脚本 ├── tool/ │ ├── hpm.cmd # 内部工具入口(自动定位 SDK 自带 Python) │ ├── hpm.py # configure / copy-board / copy-linker 实现 │ └── gen_launch.py # 自动生成 launch.json(根据 build.cmd 配置) ├── build.cmd # 编译入口(双击即可) ├── flash.cmd # 烧录入口(双击即可) ├── CMakeLists.txt # 工程构建定义 ├── BUG_REPORT.md # Bug 报告模板 └── hpm_app-workspace.code-workspace # VS Code 工作区文件 ``` > ⚙ `APP_NAME` 自动取**工程根目录名**,改工程名只需重命名外层目录。 > 📂 产物输出到 `out/__/output/`。 --- ## 2. 使用方法 ### 2.1 快速开始(推荐) 直接从仓库克隆代码,然后配置 SDK 路径即可使用: ```cmd # 克隆仓库到本地 git clone <仓库地址> <项目名称> # 进入项目目录 cd <项目名称> # 配置 SDK 路径(两种方式任选其一) # 方式 1:手动修改 build.cmd 和 flash.cmd 第 5 行 # set SDK_ENV=F:\MCU\HPM\sdk_env_v1.11.0 # 方式 2:使用 VS Code 任务(推荐) # 打开项目后,按 Ctrl+Shift+P → Tasks: Run Task → HPM: Configure SDK Path ``` --- ## 3. VS Code 工作流 工程打开后,按 `Ctrl+Shift+P` → `Tasks: Run Task`(或绑定快捷键),共 **9 个 `HPM:` 任务**: | 任务 | 作用 | | ------------------------------ | --------------------------------------------------------- | | `HPM: Build` | 默认编译(`Ctrl+Shift+B` 直接触发) | | `HPM: Clean` | 删除 `out/` 全部产物 | | `HPM: Rebuild` | Clean + Build 顺序执行 | | `HPM: Flash` | 用 OpenOCD 烧录已编译的 ELF | | `HPM: Build & Flash` | 编译并烧录(Build 失败则中止) | | `HPM: Configure` | **弹出下拉菜单**,切换 Board / BuildType / Optimize / Probe | | `HPM: Configure SDK Path` | **弹出输入框**,配置 SDK_ENV 路径 | | `HPM: Copy Default Linker` | 把 SDK 默认 linker 拷到 `linker/` 供本地修改 | | `HPM: Copy Default Board` | 把 SDK 默认 board 文件夹拷到 `board//` 供本地修改 | > ![VS Code 任务面板](doc/image-1.png) --- ## 4. 切换板子 / 编译类型 / 调试器(Configure) 运行 **`HPM: Configure`** → 在下拉菜单中选择,例如: | 类别 | 选项示例 | | ---------- | ----------------------------------------------------------------------------------------- | | 🎯 Board | `hpm5301evklite` / `hpm5300evk` / `hpm6750evkmini` / `hpm6750evk2` / `hpm6800evk` / ... | | 🔨 BuildType | `flash_xip`(XIP 就地执行) / `flash`(拷贝到 RAM) / `flash_uf2` / `ram` | | ⚡ Optimize | `debug`(-O0 + 调试信息) / `release`(-Os 优化) | | 🔌 Probe | `ft2232` / `cmsis_dap` / `jlink` / `ft232` / `nds_aice_micro` | **机制**:底层调用 `tool\hpm.cmd configure KEY=VALUE`,直接改写 `build.cmd` / `flash.cmd` 里的 `if not defined KEY set KEY=...` 行,**一次只改一项**。多项就多跑几次。 运行 **`HPM: Configure SDK Path`** → 在弹出的输入框中输入 SDK_ENV 路径(如 `F:\MCU\HPM\sdk_env_v1.11.0`),会同时更新 `build.cmd` 和 `flash.cmd`。 > ![Configure 下拉菜单](doc/image-2.png) --- ## 5. 本地化 Linker / Board(可选) 默认情况下,**构建会直接用 SDK 自带的 linker 和 board 文件**,无需改任何东西。 只有需要**自定义**(如改 flash 大小、改 pinmux、加自定义 cfg)时,才需要"本地化"。 ### 5.1 自定义 linker 1. 运行 `HPM: Copy Default Linker` → 自动按当前 `BOARD` + `HPM_BUILD_TYPE` 拷到 `linker/_.ld`。 2. **无需修改 CMakeLists.txt**,系统会自动根据 `BOARD` 的 SOC 字段匹配 `linker/_.ld`。 3. 运行 `HPM: Rebuild`。 > **自动匹配逻辑**:系统会读取 `board//.yaml` 中的 `soc` 字段,然后查找 `linker/_.ld`。如果找不到,会自动使用 SDK 默认的链接脚本。 ### 5.2 自定义 board 1. 运行 `HPM: Copy Default Board` → 拷到 `board//`。 2. 直接编辑 `board//` 里的文件(`board.c` / `pinmux.c` / `hpm_soc_feature.h` 等)。 3. 运行 `HPM: Rebuild`。 > `CMakeLists.txt` 第 22 行已设置 `BOARD_SEARCH_PATH`:**本地有则用本地,没有则回退 SDK 自带**,所以不需要再改 CMake。 --- ## 6. 命令行使用(无 VS Code 也可用) ```cmd build.cmd :: 编译 flash.cmd :: 烧录 tool\hpm.cmd configure BOARD=hpm6750evkmini tool\hpm.cmd configure HPM_BUILD_TYPE=flash tool\hpm.cmd copy-board [--force] tool\hpm.cmd copy-linker [--force] ``` 环境变量优先级**高于** `build.cmd` 内默认值,可临时覆盖: ```cmd set BOARD=hpm6300evk && build.cmd ``` --- ## 7. 维护与扩展 - **加新板子下拉项**:只需修改模板的 `.vscode/tasks.json` 的 `pickString`。`flash.cmd` 会自动从 board yaml 文件获取配置,无需手动维护映射表。 - **换 SDK 版本**:改模板 `build.cmd` 第 5 行 `set SDK_ENV=...` 即可。 - **打开 SDK 中间件**:`CMakeLists.txt` 第 34 行附近放开 `set(CONFIG_FREERTOS 1)` / `set(CONFIG_LWIP 1)` 等。 - **升级模板**:直接编辑 `F:\MCU\HPM\.template\hpm_app\` —— **新生成的工程自动带上**,老工程不会被回写(设计如此)。 --- ## 8. 调试配置 `.vscode/launch.json` 会**自动生成**,无需手动修改。运行 `HPM: Configure` 或 `HPM: Configure SDK Path` 后会自动更新。配置会根据当前 `BOARD`、`HPM_BUILD_TYPE`、`CMAKE_BUILD_TYPE` 和 `PROBE` 自动调整: - **ELF 文件路径**:`out/__/output/.elf` - **OpenOCD 配置**:自动选择 `hpmxxx_all_in_one.cfg`(从 board yaml 获取 SOC 信息) - **SVD 文件**:自动匹配对应 SOC 的寄存器描述文件 - **调试探针**:从 board yaml 文件自动获取 `openocd-probe` 配置 调试快捷键: - `F5`:开始调试 - `F10`:单步跳过 - `F11`:单步进入 - `Shift+F11`:单步退出 - `Shift+F5`:停止调试 --- ## 9. 常见问题 | 现象 | 原因 / 解决 | | --------------------------------------- | -------------------------------------------------------------------------------------------- | | 切换 Board 后编译报 `board.h not found` | 跑一次 `HPM: Rebuild` 让 CMake 重新解析路径。 | | 双击 `build.cmd` 提示找不到工具链 | 检查 `build.cmd` 第 5 行 `SDK_ENV` 是否指向真实存在的 sdk_env 安装目录。 | | 产物 ELF 文件名不对 | 直接重命名工程**根目录**即可(`APP_NAME` 自动取目录名),不要去改 `CMakeLists.txt`。 | | `HPM: Configure` 显示 `[WARN] Key 'XXX' not found` | 该 KEY 在 `build.cmd` / `flash.cmd` 里没有 `if not defined ... set` 行,需先手工添加。 | | **调试退出后单片机卡住** | **已知问题**:调试退出时,单片机可能停留在断点处或异常状态。**临时解决方案**:手动复位单片机,或在调试退出前先移除所有断点。 |