本帖最后由 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无效??
|