程序加载部署
程序加载功能通过 Bootloader + APP 双区结构实现固件升级,用户完成首次部署后可日常通过串口升级 APP,无需 DAP 调试器。
首次部署同样无需 Keil:可通过 EmeyeStudio 的调试器加载 (SWD)功能直接烧写 emeboot 与 APP;Keil 方式作为备选保留。
部署前提
硬件准备
| 硬件 | 说明 |
|---|---|
| 目标板 | STM32F407 开发板或其他兼容硬件 |
| DAP 调试器 | ST-Link 或 J-Link(仅首次部署需要) |
| 串口线 | 用于上位机通信(程序加载、XCP 观测) |
软件准备
| 软件 | 说明 |
|---|---|
| Keil MDK-ARM | 版本 ≥ 5.x,需安装 STM32F4xx_DFP pack |
| EmeyeStudio | 上位机软件,提供程序加载功能 |
| 串口终端工具 | 串口助手、Tera Term 等(用于调试) |
Flash 分区说明
程序加载依赖 Bootloader + APP 双区结构:
| 区域 | 起始地址 | 大小 | 内容 |
|---|---|---|---|
| Bootloader 区 | 0x08000000 | 64KB | emeboot(上电首先运行) |
| 状态区 | 0x08010000 | 64KB | 启动标志、分区信息 |
| APP 区 | 0x08020000 | 384KB | 用户应用程序 |
工作原理:MCU 上电后 emeboot 先运行,检查 APP 有效性后跳转执行;程序加载时,EmeyeStudio 通过 XCP 命令触发 APP 进入 Bootloader 模式,再通过 UDS 刷写新固件。
部署步骤
步骤 1:全片擦除
必须执行:Keil 烧写只擦除当前扇区,老代码残留会导致启动异常。
- 打开 Keil 工程(emeboot 或 APP)
- 连接 DAP 调试器到板子 SWD 接口
- Keil 菜单:Flash → Erase
- 选择 Erase Full Chip → 点击 Start
- 等待输出 "Erase Done"
步骤 2:烧写 emeboot(Bootloader)
- 打开 emeboot.uvprojx 工程文件
- 确认 Target 配置:
- IROM1: Start=0x08000000, Size=0x10000 - 确认 C/C++ 配置:
- Define 含:TARGET_STM32, STM32F407xx, USE_HAL_DRIVER
- 不要定义 VECT_TAB_OFFSET(emeboot 使用默认值 0x00) - 编译:按 F7 → 确认 0 Error
- 烧写:Flash → Download → 确认 "Verify OK"
步骤 3:烧写 APP(用户程序)
- 打开 mtrDrv.uvprojx(样例)或用户自有 APP 工程
- 确认 Target 配置:
- IROM1: Start=0x08020000, Size=0x60000 - 确认 C/C++ 配置:
- Define 末尾添加:, VECT_TAB_OFFSET=0x20000
- 必须添加此宏,否则 APP 启动后会死机 - 编译:按 F7 → 确认 0 Error
- 烧写:Flash → Download → 确认 "Verify OK"
步骤 4:验证部署成功
串口日志验证:
1. 复位设备
2. 打开串口终端,波特率 115200
3. 观察启动日志应包含:
[INF] Jumping to APP at 0x08020000 ...
[APP 日志...]
EmeyeStudio 连接测试:
1. 配置串口设备(COM 口、波特率 115200)
2. 点击 连接 XCP
3. 确认状态栏显示"已连接"
程序加载测试:
1. EmeyeStudio → 工具 → 程序加载
2. 选择固件文件 → 点击 加载
3. 观察 XCP 进 Bootloader → UDS 刷写 → 自动重连 XCP
注意事项
关键配置要点
| 要点 | 说明 | 忽略后果 |
|---|---|---|
| 全片擦除 | 首次部署前必须执行 | 老代码残留,APP 无法运行 |
| VECT_TAB_OFFSET | APP 必须设为 0x20000 | APP 启动后死机 |
| 波特率一致 | XCP 和 UDS 共用串口,固定 115200 | 通信失败,程序加载卡住 |
常见问题
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 烧写后仍执行老代码 | 未全片擦除 | Flash → Erase → Erase Full Chip |
| emeboot 烧写后设备无响应 | VECT_TAB_OFFSET 错误设置 | emeboot 工程不要定义 VECT_TAB_OFFSET |
| APP 跳转后死机 | VECT_TAB_OFFSET 未设 | APP 工程 Define 添加 VECT_TAB_OFFSET=0x20000 |
| 串口日志乱码 | 波特率不匹配 | 确认终端波特率为 115200 |
| 程序加载卡在 0% | APP 未集成 XCP 进 Bootloader 命令 | 参考 emXCP 集成文档 |
日常使用
完成首次部署后,后续 APP 升级无需 DAP 调试器:
- 编译 APP 生成固件文件
- EmeyeStudio 连接设备 XCP
- 程序加载 → 串口加载页签 → 选择固件 → 加载
- 加载完成后设备自动重启并运行新 APP
若 APP 变砖无法启动(串口加载失败),使用 调试器加载 页签重烧 APP 并擦除分区状态区即可恢复。