[APM32F072]

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

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

//    APM_MINI_COMInit(COM2);

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

//    /** Set address*/
//    addr = 0x08007C40;

//    /** Reset Page data*/
//    FMC_ErasePage(addr);

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

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

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

//    /** Lock Flash*/
//    FMC_Lock();

    for (;;)
    {

    }
}


写保护后我们无法用仿真器进行代码的下载,下载会一直报错。无法烧录程序。所以我们需要进行解锁FLASH。本人用的是JLINK解锁。首先将BOOT0和BOOT1的跳帽都置0,否则连接不是JLINK设备。将BOOT区置0后在选择设备的时候我们选择STM32072VBT6,选着和极海对应的ST同系列(注意:如果不选择ST的同系列下面的解锁步骤将无法实行)。选择好设备之后连接JLINK。只要我们选择ST的同系列JLINK当中的target当中的unsecure chip就会变黑,就可以进行点击解锁芯片。图片如下图当中。解锁完成可以正常下载程序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则