打印

STM32 擦写flash问题

[复制链接]
3693|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mugenwon|  楼主 | 2013-6-27 20:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mugenwon 于 2013-6-27 20:16 编辑

这问题困扰我一天了。
首先我用上面的固件自带例子来编译,无错,但debug执行是没有效果的。对应flash地址总是0,而且FLASH->SR寄存器是永远不会变,对应位写1也不见得会变0

然后我按照闪存编程的说明来做,基本是和例子一样的操作,只是我直接操作寄存器,没那么多繁琐的函数调用,简单几行如下:
int main(void)
{  Stm32_Clock_Init(9);  //72M,参数为倍频,这句要不要都没所谓,例子没有
    //if(FLASH->CR&(1<<7))        //先看有无锁死,有的话解锁,这里注释了不够如何都解锁         
       {   FLASH->KEYR=0x45670123;
            FLASH->KEYR=0xCDEF89AB;
        }
        FLASH->SR=0x34;                   //这句本来没有,例子有于是我加进去了,按说明这样能把几个位清0,实际永远变成1了-_-!
        FLASH->CR|=(1<<1);                //页擦除
        FLASH->AR=0x08002000;
        FLASH->CR|=(1<<6);                //开始擦除
        while((FLASH->SR&(1<<5))==0);        //等待变1,等待过程中BSY位也不会变成1,晕死!
        
        while(1);

}

我真不知道发生什么问题,是不是只有在硬件执行才有效而debug无效??
沙发
mugenwon|  楼主 | 2013-6-28 10:59 | 只看该作者
我突然发现我看说明漏了:0~3页(中容量)复位后被自动加上写保护。而且调试模式下是不能擦写的。看来只能硬件下载调试了,无仿真看来比较麻烦!

使用特权

评论回复
板凳
mugenwon|  楼主 | 2013-6-28 11:12 | 只看该作者
果然下载试验后,可以擦除了。只是感觉开头那4K不能擦掉有点浪费。因为我IAP部分估计2K足够了。

使用特权

评论回复
地板
guet_new_man| | 2013-9-27 01:02 | 只看该作者
是的,debug不行

使用特权

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

本版积分规则

96

主题

430

帖子

3

粉丝