STM32烧录新代码时如何保留EEPROM仿真区?VScode+JLink环境
解决STM32G030C8烧录时保留指定Flash页的方法
针对你的需求——在VScode搭配JLink烧录新代码时,不擦除0x0800F800-0x0800FFFF的Flash页(第31页,用于存储校准数据),以下是几种可行的实操方案:
方案1:通过VScode Cortex-Debug插件配置排除擦除区域
如果你使用的是Cortex-Debug插件(多数STM32 VScode开发场景的标配),可直接在工程的.vscode/launch.json中添加烧录规则:
- 打开
launch.json,找到对应调试配置条目 - 添加以下参数二选一即可:
- 按扇区排除:
说明:"flashErase": "sector", "sectorBlacklist": [31]flashErase设为sector表示按扇区擦除,sectorBlacklist指定跳过第31扇区(对应目标Flash页)。 - 按地址范围指定擦除区域:
说明:仅擦除0x08000000到0x0800F7FF的区域,精准避开你的EEPROM仿真区。"eraseAddressRange": "0x08000000-0x0800F7FF"
- 按扇区排除:
方案2:修改JLink全局设备配置(全工程生效)
若需要所有针对该芯片的烧录操作都跳过目标页,可修改JLink的设备配置文件:
- 找到JLink安装目录下的
JLinkDevices.xml(Windows通常在C:\Program Files\SEGGER\JLink,Linux/macOS对应安装路径) - 定位到STM32G030C8的配置段,在
<FlashBank>节点中添加排除范围:
修改后保存,重启VScode即可生效(Windows下修改需管理员权限)。<FlashBank Name="Flash" BaseAddr="0x08000000" Size="0x10000" SectorSize="0x800" NumSectors="32"> <EraseExcludeRange StartAddr="0x0800F800" EndAddr="0x0800FFFF"/> </FlashBank>
方案3:调整工程链接脚本(辅助防护)
为避免编译后的代码意外覆盖目标区域,可修改工程的链接脚本(通常命名为STM32G030C8Tx_FLASH.ld):
- 找到
FLASH内存区域定义,将长度从64KB(0x10000)改为62KB(0xF800):
此配置会让链接器确保代码和数据不超出0x0800F7FF,配合烧录工具的擦除排除规则,形成双重防护。FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 62K /* 原64K改为62K,即0xF800 */
方案4:JLink Commander手动控制烧录(临时场景)
如果只是临时需要跳过擦除,可通过JLink Commander执行手动烧录步骤:
- 打开JLink Commander,连接芯片:
JLink.exe -device STM32G030C8 -speed 4000 -if SWD - 擦除指定范围(跳过目标页):
erase 0x08000000-0x0800F7FF - 下载新代码:
loadfile your_project.hex - 启动芯片:
r g
推荐优先使用方案1,针对当前工程配置,灵活且无需全局修改。
内容的提问来源于stack exchange,提问作者BEsmart
相关产品推荐
相关产品推荐

