打印
[STM32]

关于STM32F103系列的FLASH操作的疑惑

[复制链接]
893|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
近期看到关于stm32产品远程升级IAP,也抱着研究的态度尝试了下,参考STM32官方的对XX闪存编程手册,实现对FLASH的擦除,读写都没问题,但是考虑产品的安全性,希望可以实现FLASH的读写保护,但是参照手册,对选择字节的配置老是出现问题,选择字节的写函数:
FLASH_OperatorStatus USERByteProgram(u32 Address, u16 Data)
{
        u8 Index = 1;
        u16 cache;
        while (FLASHBusyStatus && ++Index);
        if (Unlock() == LOCK) return OperatorFail;
       
        cache = FLASH_ReadDataByte(Address);
        if (cache != 0XFFFF)
        {
                USERByteErase(); //擦除选择字节
        }
//        cache = FLASH_ReadDataByte(Address);
        if (Index != 0)
        {
                FLASH->OPTKEYR = FLASH_KEY1;
                FLASH->OPTKEYR = FLASH_KEY2;        //解锁OPTKEYR
                FLASHSetOPTPG(1);               
                *(vu16*)Address = Data;
                Index = 1;
                while (!FLASHEopStatus && ++Index);
//                FLASHSetPG(0);
                FLASHSetOPTPG(0);
                FLASHClearOPTWRE;
                FLASHClearEOP;
                FLASHSetLock(1);
                if (Index != 0) return OperatorSuccess;
        }
        return OperatorFail;
}

/***很奇怪的现象就是,为什么每次解锁OPTWRE后其置1正常,但是当执行到设置OPTPG=1和*(vu16*)Address = Data;时,OPTWRE自动清除,这个好像和手册上写的不符合(手册上应该是软件清0啊,不太理解)而且每次调试都会导致FLASH被锁死,需要重新用串口解锁,很麻烦。  求指导***/

84VUADHIY)89HF80]05S%1K.png (429.84 KB )

84VUADHIY)89HF80]05S%1K.png

相关帖子

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

本版积分规则

22

主题

86

帖子

0

粉丝