固件更新
开发板上有两颗 STM32F407,每颗芯片都有独立的 SWD 下载接口。更新完整开发板时,需要将固件分别烧录到两颗芯片;两颗芯片使用相同功能时,可以烧录同一个固件文件。
重要:不要执行全片擦除。 全片擦除会删除出厂识别信息、已保存的通信参数和离线批次。正常更新只需要下载固件并执行校验。
选择固件文件
文件 |
用途 |
|---|---|
|
SANPO V47 原厂固件,产品出厂烧录和普通固件更新使用此文件 |
|
原厂固件二次开发工程的默认构建结果,包含客户扩展示例;只有使用客户扩展工程时才烧录 |
如果文件名中带有更新的版本号,应优先使用同一发布包内版本号一致的固件和文档。不要将 V4 固件烧录到 STM32G473 的 V6 开发板。
准备工作
下载并安装 STM32CubeProgrammer。
准备 ST-LINK 下载器和 SWD 连接线。
通过 USB 或开发板 5 V 输入为控制部分供电。
更新前停止电机运行,并断开电机高压电源。
记录当前通信参数和离线批次,以便需要时重新设置。
SWDIO、SWCLK 和 GND 的引脚位置请参考 原理图与引脚定义。
使用 STM32CubeProgrammer 更新原厂固件
将 ST-LINK 接到第一颗 STM32 的 SWD 接口,并让开发板控制部分上电。
打开 STM32CubeProgrammer,选择
ST-LINK和SWD,然后连接芯片。打开
spine_v4_v47_release.bin。BIN 文件的下载地址填写
0x08000000。开启下载后的校验功能,执行下载并确认校验成功。
断开软件连接,将 ST-LINK 接到第二颗 STM32 的 SWD 接口。
使用同一个固件文件和地址重复下载、校验。
两颗芯片都完成后,断开 ST-LINK,重新给开发板上电。
不要选择 Full chip erase、Mass erase 或类似的全片擦除选项。STM32CubeProgrammer 在正常下载时会自动处理固件所在区域,不需要先手动擦除整颗芯片。
V47 原厂固件和默认客户示例都小于 128 KiB,正常下载不会进入保存通信参数的 Flash 扇区。如果客户自行编译的 BIN 达到或超过 128 KiB,烧录前应先记录通信参数;程序进入 0x08020000 之后时,STM32F407 的整扇区擦除可能会清掉这些参数,即使没有执行全片擦除。
更新后检查
开发板连接电脑后通常会出现两个 USB 串口。分别打开两个串口,按文本发送:
AT+VER
V47 固件的正常返回为:
V47
然后至少检查一次实际使用的 CAN 和 RS485 接口。如果使用 Linux SocketCAN,还可以执行:
sudo modprobe gs_usb
ip link show type can
正常情况下,完整开发板会出现 4 个 canX 接口。Linux 分配的接口编号不一定与开发板丝印顺序相同,控制电机前应先确认对应关系。
更新失败时的处理
现象 |
处理方法 |
|---|---|
ST-LINK 无法连接 |
检查 SWDIO、SWCLK、GND、供电和下载口是否接对;降低 SWD 频率后重试 |
下载成功但校验失败 |
重新连接芯片并再次下载,不要先执行全片擦除 |
只能找到一个 USB 串口 |
确认两颗 STM32 都已经烧录,并检查另一个 USB 接口和供电 |
|
确认串口没有被其他软件占用,发送方式为文本且结束符为 |
全片擦除后原厂固件不能正常工作 |
出厂认证信息已被删除,请按出厂认证信息恢复读取两颗 MCU 的 UID 并联系 SANPO 技术支持获取专属认证文件 |
原来的默认波特率或离线批次丢失 |
重新设置通信参数并重新上传批次;具体命令见 离线批量执行 |
烧录客户或自定义固件
使用 原厂固件二次开发 时,应烧录该客户工程实际生成的 BIN 或 ELF 文件,并同样使用“下载并校验”,不要执行全片擦除。
使用 自定义固件开发 时,当前提供的 CAN 标准帧、CAN 扩展帧和 RS485 样例使用相同的芯片和引脚配置,同一个编译结果可以烧录到任意一颗 STM32。烧录 MCU(1)时对应 CAN-1/2、RS485-1/2;烧录 MCU(2)时对应 CAN-3/4、RS485-3/4。
Keil 工程正常生成 .axf 和 .hex 文件。可以直接在 Keil 中使用 ST-LINK 下载;如果使用 STM32CubeProgrammer,请选择工程生成的 .hex 文件并执行下载和校验。