STM32F103CB读擦除后重写原Hex文件无法正常工作求助
可能的原因及解决步骤
Hex文件读取不完整
ST-Link Utility默认仅读取用户Flash区域,STM32F103的选项字节(Option Bytes)这类配置区域不会被包含在常规读取的Hex中。擦除MCU会清除选项字节,重烧时未恢复这些配置会直接导致设备异常。
解决:通过ST-Link Utility的Target -> Option Bytes功能读取并记录擦除前的选项字节配置,擦除MCU后先写入正确的选项字节,再烧读回的Hex文件。Flash读保护导致读取数据无效
若MCU开启了读保护(RDP级别),ST-Link Utility读取的Hex是加密后的无效数据,重烧后自然无法正常运行。
解决:检查擦除前的读保护状态,若确已开启,读回的Hex无实际作用,需使用原始固件备份烧写;若无备份,需联系设备厂商获取合法固件。烧写配置不匹配
烧写时ST-Link Utility的参数设置可能与原MCU工作状态不匹配,比如Flash起始地址、时钟配置等。
解决:烧写时确认Program & Verify窗口的Start Address为0x08000000(STM32F103的Flash起始地址),勾选Verify after programming确保烧写内容与Hex完全一致。硬件接触或工具故障
擦除、烧写过程中可能出现ST-Link与MCU接触不良,导致部分Flash区域写入失败;或ST-Link工具本身存在临时故障。
解决:重新插拔ST-Link与MCU的接线,确保连接牢固,再次执行擦除、烧写、验证流程;也可更换ST-Link工具重试。Hex文件格式损坏
读取过程中可能出现数据错误,导致Hex文件存在记录长度、校验和等格式问题。
解决:用Hex编辑器(如HxD)打开读回的Hex,对比原始正常固件备份(若有)的关键区域内容;或使用objcopy工具将Hex转为bin文件,对比两者哈希值,确认读取文件的完整性。
内容的提问来源于stack exchange,提问作者JozefRaedo

