#有奖活动# #申请原创# #技术资源# 本人有幸得到一块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就会变黑,就可以进行点击解锁芯片。图片如下图当中。解锁完成可以正常下载程序。
|