完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Line 767: static HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) 函数为static,用户通过公开函数HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit)进行WRP解除一些保护位操作时会调用它 OBInit.WRPPage = value; OBInit.OptionType = OPTIONBYTE_WRP; OBInit.WRPState = OB_WRPSTATE_DISABLE; HAL_FLASHEx_OBProgram( OBInit); 在此函数中的如下内容: Line 834: OB->WRP0 |= WRP0_Data; Line 844: OB->WRP1 |= WRP1_Data; Line 854: OB->WRP2 |= WRP2_Data; Line 864: OB->WRP3 |= WRP3_Data; 将使得WRP被错误的更改为0xFFFFFFFF,因为在前面的代码,已经将Option bytes全部擦除了 Line 826: status = HAL_FLASHEx_OBErase(); 此时 WRP已经是0xFFFFFFFF了,所以再 or 任何内容都不会改为期望的内容了。 结论:只要调用HAL_FLASHEx_OBProgram进行WRP的解除操作,WRP就会变成0xFFFFFFFF,不保护任何Sector,而不是你期望的值。 修改:将4个 | 操作符删掉,成为OB->WRPx = WRPx_Data;就行了。 BTW:(在加保护的函数FLASH_OB_EnableWRP中有对应的OB->WRP0 = WRP0_Data;操作,之所以是正确的,是因为0xFF and Value = Value)。 |
|
相关推荐
1个回答
|
|
根据您提供的信息,当调用HAL_FLASHEx_OBProgram函数进行写保护解除操作时,WRP会变成0xFFFFFFFF的原因是,具体的代码逻辑是将参数WriteProtectPage的值赋给了OBInit.WRPPage,然后在FLASH_OB_DisableWRP函数中使用了这个值。
在STM32F系列中,WRP是一个32位的寄存器,每个位对应一个扇区的写保护状态。0表示相应的扇区是写保护的,1表示该扇区是可写的。因此,将WRP的所有位设置为1,即0xFFFFFFFF,意味着所有的扇区都将被解除写保护。 至于为什么这个函数是static的,这是因为该函数是用于内部调用的辅助函数,不需要被用户直接调用。用户只需要使用公开函数HAL_FLASHEx_OBProgram进行WRP解除操作,这个函数会在内部调用FLASH_OB_DisableWRP函数。 请注意,我提供的解释是基于您提供的信息进行推测,具体的实现可能有所不同。为了确保正确操作,建议参考相关的官方文档或参考示例代码。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 22:10 , Processed in 0.738446 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号