FLASH_Unlock(); //解锁Flash
FLASH_SetLatency(FLASH_Latency_2); //因为系统时钟为72M所以要设置两个时钟周期的延时
②擦除:
for(i=0;i<240;i++)
{
if(FLASH_ErasePage(FLASH_ADDR+i*2048) != FLASH_COMPLETE) //一定要判断是否擦除成功
return ERROR;
}
说明:FLASH_ErasePage(uint32_t Page_Address)即为Flash擦除操作,按页擦除,每页2KB,Page_Address为页的起始地址,如0x08000000是第一页起始地址,0x08000800为第二页起始地址,这里的操作擦除了0x08008000—0x0807ffff地址空间的Flash。
③写入:
unsigned char buf[1024]; //假设待写入的代码数据
unsigned short temp; //临时数据
for(i=0;i<512;i++)
{
temp = (buf[2*i+1]<<8) | buf[2*i]; //2个字节整合为1个半字
if(FLASH_ProgramHalfWord(ADDR,temp) != FLASH_COMPLETE) //判断是否写入成功
{
Return ERROR;
}
ADDR +=2; //地址要加2,因为每次写入的是2个字节(1个半字)
}
|