如何通过Cube-IDE或Cube-Programmer读取STM32F103C8T6 MCU代码?
解决STM32F103C8T6代码读取、CubeIDE连接及编程器数据理解问题
一、不擦除读取MCU已有代码
STM32F103C8T6的Flash读取功能多数编程器都支持,可能你没找对操作入口:
- 用ST-Link的话,直接用官方的STM32CubeProgrammer工具:连接MCU后切换到「Erase & Program」标签页,不要勾选「Erase before programming」,点击「Read」按钮选择保存路径,就能导出Flash内容为.bin或.hex文件,全程不会擦除芯片。
- 第三方编程器:找「读取Flash」「Dump Flash」这类选项,一般在「芯片操作」或「Flash管理」菜单下,避开擦除相关选项即可。
- 注意:如果芯片开启了读保护(RDP),直接读取会失败,解除读保护会自动擦除Flash,这是硬件层面的保护机制,无法绕过。
二、将MCU连接到CubeIDE并操作
按以下步骤来:
- 硬件连接:用ST-Link V2(或兼容款)接MCU的SWD引脚:SWCLK连PA14,SWDIO连PA13,GND对GND,VCC接3.3V(别接5V,会烧芯片)。
- IDE操作:
- 新建项目:打开CubeIDE,选「STM32 Project」,搜索「STM32F103C8T6」,按引导完成创建。
- 导入项目:选「Import」→「Existing Projects into Workspace」,导入已有项目文件。
- 调试连接:点击工具栏的调试图标(虫子形状),IDE会自动识别ST-Link并连接MCU,之后就能进行单步调试、查看寄存器、读写Flash等操作。
三、关联数据手册理解编程器的地址与数据
编程器显示的地址对应MCU的内存映射,直接对照数据手册的「Memory Mapping」章节拆解:
- Flash区域:起始地址
0x08000000,大小64KB(到0x0800FFFF),这个区间的地址对应代码存储区,显示的数据就是Flash里的机器码。 - SRAM区域:起始
0x20000000,大小20KB,是运行时临时数据区,读取到的是当前RAM里的实时数据。 - 外设寄存器区域:比如GPIOA起始地址
0x40010800,对应手册「Peripheral registers」章节,寄存器偏移地址加基地址就是实际地址,显示的数据是寄存器当前的配置或状态值。 - 实操技巧:拿编程器显示的任意地址(比如
0x08000000),去手册里搜索这个地址,找到对应存储区域后,结合「Flash memory」章节的描述,就能理解该地址的数据是代码的起始部分(中断向量表)。
内容的提问来源于stack exchange,提问作者BigMac
相关产品推荐
相关产品推荐

