[其他ST产品]

编程前禁用STM32CubeIDE的读出保护

[复制链接]
26|2
手机看帖
扫描二维码
随时随地手机跟帖
咚了个咚|  楼主 | 2025-6-17 11:00 | 显示全部楼层 |阅读模式
我知道STM32 CubeIDE调用STM32_Programmer_CLI.exe来对芯片进行编程,
可以通过向STM32_Programmer_CLI.exe发送一个--readunprotect参数来禁用芯片上的读出保护,
但是在STM32 CubeIDE中如何设置这?
我的代码在芯片上启用了读保护,在重新下载程序之前需要禁用这一功能。

使用特权

评论回复
xinpian101| | 2025-6-17 16:29 | 显示全部楼层
1. 打开STM32 CubeIDE,并打开你的工程。

2. 在工程上右键,选择“Properties”(属性)。

3. 在属性窗口中,找到“C/C++ Build” -> “Settings”。

4. 在Settings选项卡中,选择“Tool Settings”选项卡。

5. 在工具设置中,找到“MCU Post build outputs”或者“MCU Programming”相关的部分。实际上,我们需要找的是“Flash Tools”或“Programmer”相关的设置。

使用特权

评论回复
xinpian101| | 2025-6-17 16:29 | 显示全部楼层
在CubeIDE中,烧录操作是通过“Run”->“Run Configurations”来配置的,特别是对于调试/烧录的设置。

具体操作如下:

方法一:通过运行配置(Run Configurations)

1. 在菜单栏中,点击“Run” -> “Run Configurations...”。

2. 在左侧,选择你的工程对应的调试配置(通常是“Ac6 STM32 C/C++ Application”下的配置)。

3. 在右侧,选择“Startup”或“Debugger”选项卡(具体取决于你的CubeIDE版本,可能需要查找与烧录相关的设置)。

4. 实际上,在CubeIDE中,烧录操作通常是通过OpenOCD或ST-Link GDB server进行的,而STM32_Programmer_CLI是ST-Link工具的一部分。因此,我们需要找到可以传递额外参数的地方。

但是,在CubeIDE中,默认的烧录过程并不直接暴露STM32_Programmer_CLI的参数接口。因此,我们可以考虑另一种方法:使用自定义命令。

方法二:使用自定义命令(Post-build或Pre-run)

1. 在工程属性中,我们可以设置构建后步骤(Post-build steps)来执行自定义命令,包括调用STM32_Programmer_CLI.exe。

2. 这样,我们可以在构建完成后,手动执行一个命令来解除读保护。

例如,你可以添加一个构建后步骤(Post-build step)来执行解除保护命令。但是注意,解除读保护会触发芯片的整片擦除,所以需要谨慎。

具体步骤(方法二):

1. 打开工程属性(右键工程->Properties)。

2. 选择“C/C++ Build” -> “Settings”。

3. 在“Build Steps”选项卡中,找到“Post-build steps”部分。

4. 在命令输入框中,你可以输入类似如下的命令(请根据你的实际路径调整):

"C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe" -c port=SWD -rdu

注意:-rdu 是 --readunprotect 的简写。

但是,这个方**在每次构建后都执行解除读保护,这通常不是我们想要的,因为解除读保护会导致整片擦除,而且我们可能只在需要的时候才解除。

方法三:创建一个单独的外部工具配置(External Tools Configuration)

1. 在菜单栏,选择“Run” -> “External Tools” -> “External Tools Configurations...”。

2. 在左侧,右键“Program” -> “New” 创建一个新的配置。

3. 在“Main”选项卡中:

Location: 浏览找到STM32_Programmer_CLI.exe的路径(例如:C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe)

Working Directory: 可以不填,或者填你的工程目录。

Arguments: 输入参数,例如:-c port=SWD --readunprotect

4. 然后点击“Apply”,再点击“Run”即可运行这个外部工具。

这样,你可以在需要解除读保护的时候,运行这个外部工具配置。

方法四:在烧录之前执行自定义命令(通过修改Debug/Run配置)

实际上,在Run Configurations中,我们可以设置一些在烧录前执行的命令。但是CubeIDE的界面没有直接提供这个选项。因此,方法三可能是更直接和灵活的方式。

总结:

如果你希望在烧录程序之前自动解除读保护,那么可能需要通过方法二(构建后步骤)来执行,但是要注意这会导致每次构建后都解除读保护(并擦除芯片),所以不推荐。

更推荐方法三:创建一个外部工具配置,在需要解除读保护时手动运行一次。然后,再正常烧录程序(因为解除读保护后芯片已经被擦除,所以你需要重新下载程序)。

另外,你还可以考虑在代码中通过软件方式解除读保护(但这需要你的代码已经运行并且能够执行解除指令),但这不是你当前的情况,因为你需要在重新下载程序之前解除。

因此,我建议使用方法三:使用外部工具配置来运行STM32_Programmer_CLI.exe --readunprotect。

操作步骤(方法三):

1. 打开External Tools Configurations(菜单:Run -> External Tools -> External Tools Configurations...)

2. 在左侧,选择“Program”,然后右键选择“New”创建一个新的配置。

3. 在“Name”字段中,输入一个有意义的名称,比如“Unprotect STM32”。

4. 在“Main”选项卡中:

Location: 输入STM32_Programmer_CLI.exe的完整路径,或者点击“Browse File System...”按钮找到它。默认路径可能是:

Windows: C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\STM32_Programmer_CLI.exe

Linux: 通常是安装目录下的bin文件夹中

Working Directory: 可以设置为你的工程目录(可选)。

Arguments: 输入参数,例如:-c port=SWD --readunprotect

这里的port=SWD表示使用SWD接口,如果你使用的是其他接口(如JTAG),请相应修改。

如果你的调试器连接了多个设备,你可能需要指定SN(序列号)来区分,例如:-c port=SWD sn=1234567890 --readunprotect

5. 点击“Apply”保存配置。

6. 连接好你的开发板,然后点击“Run”按钮(绿色箭头)来运行这个配置。

注意:运行这个命令后,芯片会被整片擦除,读保护被解除,然后你可以正常使用CubeIDE的烧录功能重新下载程序。

如果你经常需要执行这个操作,可以将这个外部工具配置添加到工具栏以便快速访问:

在菜单栏:Window -> Perspective -> Customize Perspective... -> Command Groups Availability -> 勾选“External Tools”,然后点击OK。

然后,你可以在工具栏上看到外部工具的按钮,点击下拉箭头就能选择你配置的“Unprotect STM32”工具。

这样,你就可以在需要时方便地解除读保护了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

32

帖子

0

粉丝