您的位置:首页 > 其它

STM32 Flash 擦除 读写 成功

2013-11-14 16:36 447 查看
参考:http://download.csdn.net/detail/my_friend_ship/4166970

要点: 将数据写入flash之前,每次都要擦除,否则会写入不成功,出现的错误状态为:FLASH_Status=FLASH_ERROR_PG

写入数据成功后可以在Memory 中查看刚刚写入的数据,具体在Memory 窗口中输入:0x08010000,既可以看到此处的数据为 :Data = 0x15041979;//要写入的地址

擦除的起始地址与终止地址

#define StartAddr ((u32)0x08010000)

#define EndAddr ((u32)0x0807ffff)

//擦除

char IAP_Init()//初始化loaded 的flash

{

FLASHStatus = FLASH_COMPLETE;

//MemoryProgramStatus = PASSED;

/* Unlock the Flash Program Erase controller */

FLASH_Unlock();

/* Define the number of page to be erased */

NbrOfPage = (EndAddr - StartAddr) / FLASH_PAGE_SIZE;

/* Clear All pending flags */

FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

/* Erase the FLASH pages */

for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)

{

FLASHStatus = FLASH_ErasePage(StartAddr + (FLASH_PAGE_SIZE * EraseCounter));

}

return FLASHStatus;

}

int main(void)

{

u8 t;

u8 key;

u16 oldcount=0; //老的串口接收数据值

u16 applenth=0; //接收到的app代码长度

u8 clearflag=0;

u32 FlashDestination;

FLASH_Unlock();

RCC_Configuration();

GPIO_Configuration();

NVIC_Configuration();

SysTick_Config();

UART_init(9600);//串口初始化为9600 5648

IAP_Init();

Data = 0x15041979;//要写入的地址

u32 Address;

while(1)//循环擦除写入

{

{

IAP_Init();

int j,x;

u32 RamSource;

FLASHStatus = FLASH_COMPLETE;

/* Program the data received into STM32F10x Flash */

FLASHStatus=FLASH_ProgramWord(StartAddr, Data);

if( FLASHStatus == FLASH_COMPLETE )

{

Address = StartAddr;

if (*(u32*)Address != Data )

{

/* End session */

RFID_SendString("IAP XXXXX !"); //写入失败

}

else

RFID_SendString("IAP WRITE !");//写入成功

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: