////觉得好的点下推荐,感恩啦!
flash大小64k Rom+8k Ram的大小,stm32f051有64k Rom,总的分为 64页,一页1024byte ,在flash的Rom里面写数据掉电保存,相当于W25q80
uint32_t FLASH_START_ADDR = 0x08000000+1024*63; //1024 一页大小1k , 63 flash有64K在最后一页首地址开始写
/*****************************************************************************
功能:flash写
输入:addr:写地址 0-一页大小 data :4字节数据
返回:无
******************************************************************************/
void WriteFlash(uint32_t addr,uint32_t data)
{
FLASH_Unlock(); //½âËøFLASH±à³Ì²Á³ý¿ØÖÆÆ÷
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPERR);//Çå³ý±ê־λ
FLASH_ErasePage(FLASH_START_ADDR); //²Á³ýÖ¸¶¨µØÖ·Ò³
FLASH_ProgramWord(FLASH_START_ADDR+(addr*4),data); //´ÓÖ¸¶¨Ò³µÄ0µØÖ·¿ªÊ¼Ð´
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPERR);//Çå³ý±ê־λ
FLASH_Lock(); //Ëø¶¨FLASH±à³Ì²Á³ý¿ØÖÆÆ÷
}
/*****************************************************************************
功能:读flash
输入:读地址
返回:读到的4字节数据
******************************************************************************/
uint32_t ReadFlash(uint16_t addr)
{
uint32_t value;
value = *(uint32_t*)(FLASH_START_ADDR+(addr*4));
return value;
}