Code: Select all
void write_block(u16 number) //Запись в FLASH
{
u16 temp,wait_write,appoint_address;
if(number<17) //10 блоков должны быть записаны в параметр
{
FLASH_Unlock(); //
FLASH_ErasePage(PARAM_RAM_ADDR+number*0x800); //Стереть часть данных занимает 2K
for(temp=0;temp<1024;temp++) //Операция для 16 бит, только в 1024 раза завершена работа программы
{
appoint_address=PARAM_RAM_ADDR+number*0x800+temp*2; //Стартовый адрес плюс адрес блока плюс малый адрес блока равны целевой позиции
wait_write=prog_write_buffer[temp*2]+prog_write_buffer[temp*2+1]*0X100; //Запись 16 бит на вспышку
FLASH_ProgramHalfWord(appoint_address,wait_write); //Подождите, пока программа завершит запись
}
FLASH_Lock(); //Завершить работу программы
}
}
void backup_block(u16 number) //Резервное копирование блока программы, назначение программы перед записью перед резервной копией
{
u16 temp,appoint_address;
if(number<17)
{
for(temp=0;temp<2048;temp++)
{
appoint_address=number*0x800+temp; //Начальный адрес плюс адрес блока плюс небольшой адрес блока
prog_write_buffer[temp]=plc_programCodeBuf[appoint_address]; //Резервное копирование программы
}
}
}