stm32h7用hal库函数对FLASH写保护

 写保护:

    FLASH_OBProgramInitTypeDef obStruct;
    HAL_FLASHEx_OBGetConfig(&obStruct);

    obStruct.OptionType |= OPTIONBYTE_RDP | OPTIONBYTE_WRP;
    obStruct.RDPLevel = OB_RDP_LEVEL_1;
    HAL_FLASH_OB_Unlock();
    HAL_FLASHEx_OBProgram(&obStruct);
    HAL_FLASH_OB_Launch();

去保护:

    FLASH_OBProgramInitTypeDef obStruct;
    HAL_FLASHEx_OBGetConfig(&obStruct);
    obStruct.OptionType |= OPTIONBYTE_RDP | OPTIONBYTE_WRP;
    obStruct.RDPLevel = OB_RDP_LEVEL_0;
    HAL_FLASH_OB_Unlock();
    HAL_FLASHEx_OBProgram(&obStruct);
    HAL_FLASH_OB_Launch();

### STM32H750 内部 Flash 操作库函数 STM32H750 微控制器提供了丰富的 HAL (Hardware Abstraction Layer) 库来简化硬件操作,其中包括用于内部 FLASH 存储器的操作。这些库函数位于 `stm32h7xx_hal_flash.h` 和 `stm32h7xx_hal_flash_ex.h` 文件中。 #### 主要库函数及其用途 1. **初始化和解锁** - `HAL_FLASH_Unlock()`:解除写保护并允许对闪存进行编程或擦除操作[^1]。 2. **擦除操作** - `HAL_FLASHEx_Erase()`: 执行扇区或页的擦除操作。该函数接受一个指向 `FLASH_EraseInitTypeDef` 结构体指针作为参数,定义了待擦除区域的信息。 ```c FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PageError = 0; /* Fill EraseInit structure */ EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = StartPage_Address; EraseInitStruct.NbPages = NumberOfPages; /* Call the erase function */ if(HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK){ // Handle error here } ``` 3. **编程操作** - `HAL_FLASH_Program()`: 将单字、半字或双字的数据写入指定地址处。需要注意的是,在调用此函数前必须确保目标位置已被成功擦除。 ```c uint64_t DataToWrite = 0xAAAAAAAA55555555; if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, Address, DataToWrite) != HAL_OK){ // Error handling code goes here } ``` 4. **锁定** - `HAL_FLASH_Lock()`:重新启用写保护机制以防止意外修改闪存内容。 为了确保上述 API 的正常工作,建议开发者仔细查阅官方提供的数据手册以及参考手册中的具体章节,了解所使用的特定型号的具体特性与限制条件。 #### 注意事项 - 在执行任何写入或擦除命令之前,务必确认已正确配置系统时钟,并且电源电压稳定在规定范围内。 - 对于批量生产的产品而言,应考虑加入额外的安全措施(如 CRC 校验),以防固件损坏影响设备稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值