程序加载部署

程序加载功能通过 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 烧写只擦除当前扇区,老代码残留会导致启动异常。

  1. 打开 Keil 工程(emeboot 或 APP)
  2. 连接 DAP 调试器到板子 SWD 接口
  3. Keil 菜单:Flash → Erase
  4. 选择 Erase Full Chip → 点击 Start
  5. 等待输出 "Erase Done"

步骤 2:烧写 emeboot(Bootloader)

  1. 打开 emeboot.uvprojx 工程文件
  2. 确认 Target 配置:
    - IROM1: Start=0x08000000, Size=0x10000
  3. 确认 C/C++ 配置:
    - Define 含:TARGET_STM32, STM32F407xx, USE_HAL_DRIVER
    - 不要定义 VECT_TAB_OFFSET(emeboot 使用默认值 0x00)
  4. 编译:按 F7 → 确认 0 Error
  5. 烧写:Flash → Download → 确认 "Verify OK"

步骤 3:烧写 APP(用户程序)

  1. 打开 mtrDrv.uvprojx(样例)或用户自有 APP 工程
  2. 确认 Target 配置:
    - IROM1: Start=0x08020000, Size=0x60000
  3. 确认 C/C++ 配置:
    - Define 末尾添加:, VECT_TAB_OFFSET=0x20000
    - 必须添加此宏,否则 APP 启动后会死机
  4. 编译:按 F7 → 确认 0 Error
  5. 烧写: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 调试器:

  1. 编译 APP 生成固件文件
  2. EmeyeStudio 连接设备 XCP
  3. 程序加载 → 串口加载页签 → 选择固件 → 加载
  4. 加载完成后设备自动重启并运行新 APP

若 APP 变砖无法启动(串口加载失败),使用 调试器加载 页签重烧 APP 并擦除分区状态区即可恢复。


相关文档