如题,已经试过STM32CubeProgrammer
stm32ST_LINKunility
keil5带的复位功能
还有flash Loader Demonstrator
全都不行,情况如下
STM32CubeProgrammer
stm32ST_LINKunility
keil5
flash Loader Demonstrator
这个是一直卡在这个界面
我现在感觉就是我的指令写不进去,但是不知道为什么,也不知道怎么办……有没有人救一下啊!这是学校的板子,我们自己买都不知道去哪……
如题,已经试过STM32CubeProgrammer
stm32ST_LINKunility
keil5带的复位功能
还有flash Loader Demonstrator
全都不行,情况如下
STM32CubeProgrammer
keil5
答案:
我有一些解决读保护问题的建议:
1.检查芯片是否损坏或非法:
使用 ST_LINK 解除 STM32F4 的读保护模式时,需要设置 Option Bytes 的值,如果之前用户执行了 FLASH 编程操作或者设置了不正确的 Option Bytes 值,就可能会导致读保护无法解除。因此,首先建议您检查芯片是否存在损坏或非法操作。
2.使用 STLINK Utility 重新刷写 Option Bytes:
如果您尝试使用 STM32CubeProgrammer、Keil5、Flash Loader Demonstrator 等工具无法解除读保护模式,此时您可以尝试使用 STLINK Utility 工具重新刷写 Option Bytes。
具体步骤如下:
a.连接 STM32F4 板子并打开 STLINK Utility 工具;
b.选择 Target -> Option Bytes 页面,设置 RDP 密码为 Level 0;
c.单击 Read Out Protection 的下拉框,选择禁用选项 Disable Read Out Protection,然后单击 Apply 按钮;
d.单击 Program & Verify 按钮,将新的 Option Bytes 代码刷写到芯片中,这样您就成功将 STM32F4 的读保护模式禁用了。
代码示例:
#include "stm32f4xx.h"
#define FLASH_BASE_ADDRESS 0x08000000
void Disable_ReadOutProtection(void)
{
/* Unlock the Flash Bank1 Program Erase controller */
FLASH_Unlock();
/* Wait until Flash Program area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_EOP) == RESET) {}
/* Clear all FLASH flags */
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_OPERR|FLASH_FLAG_WRPERR|FLASH_FLAG_PGAERR|FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
/* Set Start Address of the sector to be erased */
FLASH_EraseSector(FLASH_Sector_0, VoltageRange_3);
/* Wait until End of peripheral operation flag is set */
while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)==RESET) {}
/* Override the default RCC clock configuration, in order to
enable the flash programming during device Run phase
(see System_stm32f4xx.c file) */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_CR |= PWR_CR_BYTE1_ADDRESS;
FLASH->OPTCR |= 0x01;
/* Lock the Flash Bank1 Program Erase controller */
FLASH_Lock();
}
int main(void)
{
/* Disable Readout Protection */
Disable_ReadOutProtection();
return 0;
}
3.使用 JLink 调试器解除读保护模式:
使用 JLink 调试器解除 STM32F4 的读保护模式需要以下步骤:
a.连接 STM32F4 板子和 JLink 调试器;
b.打开 JLinkGDBServer,并输入以下命令:unlock kinetis_flash
c.然后在 gdb 控制台中输入:monitor mass_erase,mass_erase 命令将删除所有 Flash 数据;
d.输入 savebin 0x08000000 0x00010000 test.bin 命令将 Flash 数据保存到 test.bin 文件中;
e.最后输入 quit 命令退出 gdb。
4.使用 OpenOCD 解除读保护模式:
如果您希望使用 OpenOCD 解除 STM32F4 的读保护模式,您需要使用以下命令:
a.启动 OpenOCD:openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg
b.在 gdb 控制台中输入以下命令:
source [find interface/stlink-v2.cfg]
source [find target/stm32f4x.cfg]
# Erase entire flash except BOOTLOADER
init
reset halt
flash protect 0 0x08000000 last off
flash erase_sector 0 0 11
flash write_bank 0 path/to/your/file.bin 0
reset run
exit
以上两个命令文件可以用一个 .cfg 代替,路径在 openocd 的安装目录下。
以上是一些解决读保护问题的建议,希望对您有所帮助。如果您还有任何疑问,请随时与我联系。