胡木兆 2023-05-21 23:29 采纳率: 40%
浏览 32

stm32f4一直没法解除读保护怎么办

如题,已经试过STM32CubeProgrammer
stm32ST_LINKunility
keil5带的复位功能
还有flash Loader Demonstrator
全都不行,情况如下
STM32CubeProgrammer

img


stm32ST_LINKunility

img

img

img

keil5

img

img


flash Loader Demonstrator
这个是一直卡在这个界面

img


我现在感觉就是我的指令写不进去,但是不知道为什么,也不知道怎么办……有没有人救一下啊!这是学校的板子,我们自己买都不知道去哪……

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-22 08:08
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      答案:

      我有一些解决读保护问题的建议:

      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 的安装目录下。

      以上是一些解决读保护问题的建议,希望对您有所帮助。如果您还有任何疑问,请随时与我联系。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估
  • ¥15 java 通过反射找路径下的类,打包后就找不到
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错