flash模拟EEROM

FLASH中:0x08000000--0x08000000+SIZE保存的是用户代码

Rule:

16位为传输单位

读数据:

u16 STMFLASH_ReadHalfWord(u32 faddr)

  • 可以在通用地址空间直接寻址:data=*(vu16*)ADDR;[ADDR为32位数据,指向的数据为uv16型]

写数据:

  • 写之前1:解锁FLASH_KEYR(FLASH_Lock(void);| FLASH_Lock(void);)
  • 写之前2:擦除,也就是其值必须是 0XFFFF,否则无法写入。[擦除页或直接擦除ALL]  1页=2k字节
  • 写之前3:  确保BSY 位为’0’
  • 写半字即16位(FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);库里还有Word,byte版本实际上就是写两次HalfWord或1个byte占16位)
  • Wait until BSY==1

擦除:

  • FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
  • FLASH_Status FLASH_EraseAllPages(void);
  • FLASH_Status FLASH_EraseOptionBytes(void);

ALIENTEK:

void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)

void STMFLASH_Read(u32 ReadAddr,u16 *pBuffer,u16 NumToRead)

Insure That:

  1. 地址必须是用户代码区以外的地址,如果把用户代码给卡擦了,可想而知你运行的程序可能就被废了(先在KEIL中限制程序空间,但只要重刷就会失效
  2. 地址必须是 2 的倍数
posted @ 2014-03-20 00:21  熄灯就睡  阅读(408)  评论(0编辑  收藏  举报