1. Erase Full Chip 全片擦除(推荐)

  1. 打开 MDK Keil,打开项目
  2. 点击魔术棒图标(Options for Target)
  3. 切换到 “Debug” 选项卡
  4. 点击 “Settings” 按钮
  5. 切换到 “Flash Download” 选项卡
  6. 在 “Download Function” 功能栏勾选 “Erase Full Chip”
  7. 点击 “OK” 保存设置
  8. 点击 “Download” 烧录任意程序

原理

Erase Full Chip 会擦除芯片 Flash 中的全部内容,包括用于读写保护的配置信息,从而解除锁定状态,恢复正常烧录功能。

使用 ST-Link Utility 工具(推荐)

操作

  1. 安装 ST-Link Utility
  2. 连接 ST-Link 和目标板
  3. 打开 ST-Link Utility,点击 “Connect”
  4. 选择 “Target → Option Bytes”
  5. 将 “Read Out Protection” 设为 “Disable”,点击 “Apply”
  6. 断开连接,返回 Keil 正常烧录

适用场景

当 Keil 中无法正常解锁时使用

使用 Keil 的 Option Bytes 功能(推荐)

操作

  1. 在 Keil 中选择 “Target → Option Bytes”
  2. 在 “Read Out Protection” 下拉菜单中选择 “Disable”
  3. 点击 “Apply” 和 “OK” 保存
  4. 重新烧录程序

优势
只清除保护位,不删除用户程序(仅适用于读保护)

在这里插入图片描述

PB3默认是JTAG调试接口

PB3 默认是 JTAG 的 JTDO 引脚,需要添加禁用 JTAG 的代码(GPIO_Remap_SWJ_JTAGDisable);
如果不禁用 JTAG,这个引脚无法作为普通 GPIO 使用

void Key_Init(void) {
  // 禁用 JTAG,释放 PB3/PB4/PA15 作为普通 GPIO
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐