void Internal_EE_Write32(uint16_t position, uint32_t data){ DATA_EEPROM_Unlock(); FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_OPTVERRUSR); DATA_EEPROM_ProgramWord(INTERNAL_32BIT_START_ADDRESS+4*position, data); DATA_EEPROM_Lock(); }
void writeCalibData(CALIB_TypeDef* calibStruct) { __IO FLASH_Status FLASHStatus = FLASH_COMPLETE; uint32_t Address = 0; uint32_t dataToWrite; /* Unlock the FLASH PECR register and Data EEPROM memory */ DATA_EEPROM_Unlock(); /* Clear all pending flags */ FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR); /* Data EEPROM Fast Word program of FAST_DATA_32 at addresses defined by DATA_EEPROM_START_ADDR and DATA_EEPROM_END_ADDR */ Address = (uint32_t) USER_CALIB_DATA; dataToWrite = 0x00; dataToWrite = (uint32_t)(calibStruct->TS_CAL_COLD) << 16; FLASHStatus = DATA_EEPROM_ProgramWord(Address, dataToWrite); if(FLASHStatus != FLASH_COMPLETE) { while(1); /* stay in loop in case of crittical programming error */ } Address += 4; dataToWrite = 0x00; dataToWrite = (uint32_t)(calibStruct->TS_CAL_HOT) << 16; FLASHStatus = DATA_EEPROM_ProgramWord(Address, dataToWrite); }
void Internal_EE_WriteM32(uint16_t start_position, uint32_t* data, uint16_t length){ uint16_t i = 0; __IO FLASH_Status FLASHStatus = FLASH_COMPLETE; DATA_EEPROM_Unlock(); FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_OPTVERRUSR); while(i<length){ FLASHStatus = DATA_EEPROM_ProgramWord(INTERNAL_32BIT_START_ADDRESS+4*(start_position+i), data[i]); if(FLASHStatus == FLASH_COMPLETE){ i++; }else{ FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR); } } DATA_EEPROM_Lock(); }
void eeprom_write(uint32_t address_of_read, uint32_t data) { DATA_EEPROM_Unlock(); // разблокировка перед записью /* Clear all pending flags */ FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR | FLASH_FLAG_OPTVERRUSR); /* Data EEPROM Fast Word program of FAST_DATA_32 at addresses defined by DATA_EEPROM_START_ADDR and DATA_EEPROM_END_ADDR */ Address = DATA_EEPROM_START_ADDR+address_of_read; if(Address > DATA_EEPROM_END_ADDR) { // ОШИБКА вне диапазона eeprom !!!! DATA_EEPROM_Lock(); return; } // Запись данных по адресу FLASHStatus = DATA_EEPROM_ProgramWord(Address, data); DATA_EEPROM_Lock(); if(FLASHStatus != FLASH_COMPLETE) { // ОШИБКА записи eeprom !!!! return; } FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_SIZERR | FLASH_FLAG_OPTVERR); // Проверка записанных данных if(*(__IO uint32_t*)Address != data) { DataMemoryProgramStatus = FAILED; // ОШИБКА записи !!!!! return; } }