在代码 对 stm32 写保护的操作

在工作中遇到了需要对stm32的部分flash中的代码进行写保护的需求。

一开始调查发现可以使用stm32的官方软件 stm32 stlink utility或者更新版本的stm32CubeProgrammer对指定的flash页进行写保护操作。

虽然用上面的方式可以达到目的,不过 为了生存部门的方便,我在网上搜寻能否在自动下载的时候把写保护的操作一起做了。 

因为现在生产部门使用的一种正点原子出品的。离线下载器,而这种离线下载器并不支持写入  写保护命令的功能(只支持读保护)。

在紧急时刻,发现在正点原子的论坛里面,有人说已经通过代码实现了这个功能。可是并没有告诉如何实现。

于是就去官方的flash.c文件里面去搜索,果然有FLASH_Status FLASH_EnableWriteProtection(u32 FLASH_Pages) 这个函数。

接着直接调用,Flash_Pages这个入口参数使用FLASH_WRProt_Pages0to3等官方定义的宏定义。调用执行后,再用CubeProgrammer查看,并没有把相应的页设置为只读。这说明,设置失败了。看来只能一点点找问题了。

单步执行后,发现在函数 FLASH_EnableWriteProtection里面第二次调用FLASH_WaitForLastOperation这个函数的时候,返回值为 FLASH_ERROR_PG 。

又参照了,官方的PM0075    Programming manual   查看  寄存器FLASH_SR的标志位 PGERR

说明再写如内存地址的时候,这个地址并不是0xFFFF。然后再iar里面去看,果然OB->WRP1 这个地址为0x00FF,不是0xffff,

接着再找为何不是0xFFFF,难道是写入之前,要先擦除一下??,于是再写保护的函数前面增加了一个FLASH_EraseOptionBytes 的函数,

同时在网上也找到有人 这样类似的操作。

https://community.st.com/s/question/0D50X00009Xkbjh/flash-write-protection

执行过这样的两个函数后,前12页flash就不能写入了。再去用pc软件观察,验证没问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值