初级会员

- 积分
- 114
- 金钱
- 114
- 注册时间
- 2014-7-2
- 在线时间
- 17 小时
|
5金钱
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define STM32_FLASH_SIZE 256
//////////////////////////////////////////////////////////////////////////////////////////////////////
#define STM32_FLASH_BASE 0x08000000
#if STM32_FLASH_SIZE<255
#define STM_SECTOR_SIZE 1024
#else
#define STM_SECTOR_SIZE 2048
#endif
#define EEPROM_PAGE_ADDR STM32_FLASH_BASE + (STM32_FLASH_SIZE*1024) - STM_SECTOR_SIZE //页地址
#define EEPROM_STRART_ADDR EEPROM_PAGE_ADDR + 4 //EEPROM起始地址
void STMFLASH_Write(u16 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
uint8_t i,erase = 0;
uint32_t EEPROM_ADDR = EEPROM_STRART_ADDR + WriteAddr;//写入的起始地址
uint32_t EEPROM_ADDRS= EEPROM_ADDR + 2*NumToWrite; //结束地址
if((EEPROM_ADDR>=EEPROM_STRART_ADDR)&&(EEPROM_ADDRS<(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))//检查越界
{
FLASH_Unlock();
{
STMFLASH_Read(0,STMFLASH_BUF);
for(i=0;i<NumToWrite;i++)//D£?éêy?Y
{
if(STMFLASH_BUF[WriteAddr+4+i]!=0xFFFF)//Dèòa2á3y
erase=1;
break;
}
if(erase
{
while(!(FLASH_ErasePage(EEPROM_PAGE_ADDR) == FLASH_COMPLETE));//擦除扇区
STMFLASH_Read(0,STMFLASH_BUF);
while(1){for(i=0;i<1024;i++){uart1_SendDatas(STMFLASH_BUF);}}
这里串口返回的数据是FF FF FF FF 00 00 00 00....
for(i=WriteAddr+4;i<NumToWrite+4;i++)//?′??
{
STMFLASH_BUF[WriteAddr+4+i]=pBuffer;
}
STMFLASH_Write_NoCheck(EEPROM_STRART_ADDR,STMFLASH_BUF+4,(STM_SECTOR_SIZE/2)-4)
}
else
STMFLASH_Write_NoCheck(EEPROM_ADDR,pBuffer,NumToWrite);
}
|
|
|