arm的在线升级程序int main(void)
{
u16 tmp;
Init_All_Periph();
UserProgram = (void (*)()) (0x08004131);
for(tmp=0;tmp<1024;tmp++)DATA.u_int[tmp]=(u16)0xFFFF;
if(BKP_ReadBackupRegister(BKP_DR1)==(u16)0x0000)(*UserProgram)();
else if(BKP_ReadBackupRegister(BKP_DR1)==(u16)0x0690)
{
up_data=1;
baud=BKP_ReadBackupRegister(BKP_DR2);
}
else
{
up_data=0;
Init595_165();
tmp=Read165();
I2C_EE_BufferRead(&address;_open,0x802,1);
if(address_open==1)I2C_EE_BufferRead(&address;,0x801,1);
else address=tmp>>8;
tmp=tmp>>5;
tmp&=7;
if(tmp<6)rate_485=0x01<<tmp;
else rate_485=0x01;
baud=rate_485*2400;
}
time_out=0;
U_count=0;
U_count1=0;
USART1_Configuration(baud);
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
while(1)
{
if(up_data==1)
{
if((UR.u_char[U_count]==0x0A)&&(UR.u_char[U_count-1]==0x0D))
{
if(data_check()==1)data_up();
}
}
else
{
if(U_count<U_count1)
{
if((U_count+24-U_count1)>=7)command();
}
else if((U_count-U_count1)>=7)command();
}
time_out++;
if(time_out>0x01000000)
{
BKP_DeInit();
while(BKP_ReadBackupRegister(BKP_DR1)!=(u16)0x0000)
BKP_WriteBackupRegister(BKP_DR1,(u16)0x0000);
USART1_SendByte((u16)0x4E);
NVIC_GenerateSystemReset();
}
}
}
评论3
最新资源