- 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个半字)
- }
|