#include "EEPROM.H" #include "CTRL.H" #include "modbus.h" unsigned short PrintBuf[SECTOR_SIZE]; //写入EEPROM缓冲区 u16 EEHalfWord_Read(u32 EEAddr) { return *(vu16*)EEAddr; } void EESector_Erase(u32 EEAddr) { EEAddr=EEAddr/(SECTOR_SIZE<<1)*(SECTOR_SIZE<<1); FLASH_ErasePage(EEAddr); } void EEHalfWord_Write(u32 EEAddr,u16 EEData) { FLASH_ProgramHalfWord( EEAddr, EEData) ; } //pBuf 结构体首指针 //cLen 结构体长度 //iAddr 保存地址偏移,相对于保存扇区首地址的偏移 UCHAR EEWriteStruct(void* pBuf,UINT cLen,ULONG iAddr) { UCHAR result = 0; u32 i,j,k,ProtectedPages; u32 Addr_Sector_Base = STARTADDR; u32 Addr; u32 iLen = cLen>>1; //双字节个数 u32 cBufCnt ; u32 iBufStart ; //开始保存的地址 Addr = STARTADDR+iAddr/(SECTOR_SIZE<<1)*(SECTOR_SIZE<<1); //起始保存的扇区首地址 iAddr %= (SECTOR_SIZE<<1); cBufCnt = (cLen+iAddr)/(SECTOR_SIZE<<1) +(((cLen+iAddr)%(SECTOR_SIZE<<1))>0?1:0); //不足一个算一个 //要写入几次? iBufStart = (iAddr>>1)%SECTOR_SIZE; //计算第一个起始保存扇区的第几个short i = j = k = ProtectedPages = 0; //全部锁定则退出编程 Flash_ProtectMode(&ProtectedPages ); // if(0==ProtectedPages) return result; for(j=0;j>=1; Addr+=STARTADDR; for(i=0;i