STM32f103 HAL库读保护以及解除

 读保护

void Flash_EnableReadProtection(void)
{

  FLASH_OBProgramInitTypeDef OBInit;

  __HAL_FLASH_PREFETCH_BUFFER_DISABLE();

  HAL_FLASHEx_OBGetConfig(&OBInit);

  if(OBInit.RDPLevel == OB_RDP_LEVEL_0)

  {

    OBInit.OptionType |= OPTIONBYTE_RDP;

    OBInit.RDPLevel = OB_RDP_LEVEL_1;

    HAL_FLASH_Unlock();

    HAL_FLASH_OB_Unlock();

    HAL_FLASHEx_OBProgram(&OBInit);

      HAL_FLASH_OB_Launch();//必须添加这个,不然读保护设置不生效

    HAL_FLASH_OB_Lock();

    HAL_FLASH_Lock();

  }

  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();

}

解除读保护

用 JLinkSTM32.exe

  

 选中对应型号,就可以重置选项字节了,但flash里的内容也会被擦除,得重新烧录。

STM32F103C8T6 HAL库(Hardware Abstraction Layer)是一个基于STM32Cube框架提供的低级硬件驱动库,用于简化对STM32微控制器上Flash存储器的操作。如果你想要通过HAL将数据存入Flash,你需要遵循以下几个步骤: 1. **初始化Flash**:首先,需要在你的应用程序中初始化Flash组件,通常在`SystemInit()`函数中完成。调用`HAL_flash_Init()`函数来配置Flash的相关设置。 ```c HAL_StatusTypeDef status = HAL_FLASH_Init(); if (status != HAL_OK) { // 处理错误 } ``` 2. **选择操作区域**:根据你的需求,选择合适的Flash区域。比如,你可以选择外部Flash(FLASH_BANK_1)或内部Flash(FLASH_BANK_0)。 3. **准备待写的数据**:确保你要写入的数据已经准备好,并将其复制到一块缓冲区中,因为后续的操作将以块的形式进行。 4. **开启程序闪存模式**:在写入之前,需要进入程序闪存模式,这通常涉及到写保护解除操作。 ```c status = HAL_FLASH_OB_Unlock(); // 解除保护 if (status != HAL_OK) { // 处理错误 } // 确保处于程序模式(如果不在) status = HAL_FLASH_Program(FLASH_TYPEPROGRAM, address, data, data_length); ``` 5. **写入数据**:调用`HAL_FLASH_Program`函数,其中`address`是你想要开始写入的位置,`data`是要写入的内存地址,`data_length`是数据长度。 6. **关闭闪存操作并锁定**:写入完成后,记得关闭操作并恢复写保护。 ```c HAL_FLASH_OB_Lock(); // 重新锁定写保护 ``` 7. **验证操作**:为了确认数据已成功写入,可以执行取操作并与原数据对比,不过这不是必需的,但如果需要的话,可以用`HAL_FLASH_Read_IDR()`或其他取函数检查。 ```c uint32_t read_data; status = HAL_FLASH_Read_IDR(&read_data); if (status == HAL_OK && read_data == expected_data) { // 数据写入成功 } else { // 处理错误 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值