[APM32F0] 关于APM32F072FLASH选项字节写保护及其解锁写保护

[复制链接]
3363|23
 楼主| BDW杜兰特 发表于 2022-7-19 10:12 | 显示全部楼层 |阅读模式
#有奖活动# #申请原创# #技术资源# 本人有幸得到一块APM32F072VBT6的开发板。本次就进行测试。在开发当中,我们经常会碰到一些关于FLASH写保护及其解锁问题。那么本期就介绍一下关于FLASH的写保护及其解锁功能。写保护能够保证我们的代码不被别人所随意修改,开启写保护后,程序将无法下载,无法进行FLASH的编程及其擦除,有效的保护了我们FLASH当中的的数据。废话不多少,参考代码放在下方。本次代码是在原有的官方提供的FLASH例程进行了修改编写。我将原有官方的主函数代码注释掉了。换成了自己的。
  1. void Delay(void);
  2. uint32_t return_value;
  3. int main(void)
  4. {
  5.          APM_MINI_COMInit(COM2);
  6.         if((FMC_ReadOptionByteWriteProtection()&0x08) == 0x08 )
  7.         {
  8.                 FMC_Unlock();
  9.                 FMC_UnlockOptionByte();
  10.                 FMC_EraseOptionByte();
  11.                 FMC_EnableWriteProtection(FMC_WRP_PAGE_2_3);
  12.                 FMC_LockOptionByte();
  13.                 FMC_Lock();
  14.                 NVIC_SystemReset();               
  15.         }
  16.         FMC_Unlock();
  17.         return_value = FMC_ProgramWord(0x8003000,0x12345678);
  18.         if(return_value == FMC_STATE_WRP_ERR)
  19.    {
  20.                  while(1);
  21.          
  22.          }
  23.          
  24.         FMC_Lock();
  25.          
  26.        
  27. //    uint32_t addr ;

  28. //    APM_MINI_COMInit(COM2);

  29. //    /** Unlock Flash for Clear or Write*/
  30. //    FMC_Unlock();

  31. //    /** Set address*/
  32. //    addr = 0x08007C40;

  33. //    /** Reset Page data*/
  34. //    FMC_ErasePage(addr);

  35. //    /** Read Address data*/
  36. //    printf("After Erase,       addr value = 0x%08x\r\n", *(volatile uint32_t*)addr);

  37. //    /** Write data in address*/
  38. //    FMC_ProgramWord(addr, 0x55555555);

  39. //    /** Read data again*/
  40. //    printf("After ProgramWord, addr value = 0x%08x\r\n", *(volatile uint32_t*)addr);

  41. //    /** Lock Flash*/
  42. //    FMC_Lock();

  43.     for (;;)
  44.     {

  45.     }
  46. }


写保护后我们无法用仿真器进行代码的下载,下载会一直报错。无法烧录程序。所以我们需要进行解锁FLASH。本人用的是JLINK解锁。首先将BOOT0和BOOT1的跳帽都置0,否则连接不是JLINK设备。将BOOT区置0后在选择设备的时候我们选择STM32072VBT6,选着和极海对应的ST同系列(注意:如果不选择ST的同系列下面的解锁步骤将无法实行)。选择好设备之后连接JLINK。只要我们选择ST的同系列JLINK当中的target当中的unsecure chip就会变黑,就可以进行点击解锁芯片。图片如下图当中。解锁完成可以正常下载程序。
skyred 发表于 2022-8-8 21:10 | 显示全部楼层
这不是jflash么
weifeng90 发表于 2022-8-8 21:17 来自手机 | 显示全部楼层
学到一招,谢谢分享。
onlycook 发表于 2022-8-9 15:55 来自手机 | 显示全部楼层
学到一招,感谢分享
lajdfla001 发表于 2022-8-16 10:31 | 显示全部楼层
这个不错,可以知道写保护和读保护的区别了。
udaidfa002 发表于 2022-8-16 11:00 | 显示全部楼层
这个确实不错,感觉学会了很多事情。
robertesth 发表于 2022-8-16 20:11 | 显示全部楼层
选项字节写保护怎么操作?  
hilahope 发表于 2022-8-16 21:18 | 显示全部楼层
使用stlink可以解锁吗   
lihuami 发表于 2022-8-17 16:37 | 显示全部楼层
了解一下。   
selongli 发表于 2022-8-18 17:44 | 显示全部楼层
可以代码加密吗  
wangdezhi 发表于 2022-8-19 22:43 | 显示全部楼层
APM32F072FLASH最大擦写次数是多少呢   
usysm 发表于 2022-8-20 19:35 | 显示全部楼层
为什么会写保护呢?   
 楼主| BDW杜兰特 发表于 2022-8-26 11:09 | 显示全部楼层
wangdezhi 发表于 2022-8-19 22:43
APM32F072FLASH最大擦写次数是多少呢

10000次以上
 楼主| BDW杜兰特 发表于 2022-8-26 11:09 | 显示全部楼层
usysm 发表于 2022-8-20 19:35
为什么会写保护呢?

写保护防止其它人刷新你FLASH当中的固件
 楼主| BDW杜兰特 发表于 2022-8-26 11:10 | 显示全部楼层
hilahope 发表于 2022-8-16 21:18
使用stlink可以解锁吗

没有试过,极海比较推荐JLINK
 楼主| BDW杜兰特 发表于 2022-8-26 11:11 | 显示全部楼层
robertesth 发表于 2022-8-16 20:11
选项字节写保护怎么操作?

我上面这个代码就是,可以复制下来直接替换极海例程的MAIN.C函数
 楼主| BDW杜兰特 发表于 2022-8-26 11:15 | 显示全部楼层

072不支持国密,加密的话就读写保护。
MessageRing 发表于 2022-10-4 20:38 | 显示全部楼层
感觉可以
AloneKaven 发表于 2022-11-4 21:32 | 显示全部楼层
选项字节写保护怎么操作?
Undshing 发表于 2023-1-3 16:09 | 显示全部楼层
使用stlink可以解锁吗   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

22

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部