BOOTLOADER代码如下:本人在APP中在FLASH为0x08030000 的地方写了FLASH_ADDR_UPDATE_FLAG=0x1111;每次开机都应该可以从BOOTLOADER进入APP执行才对??
但是开机后执行到iap_load_app(FLASH_APP1_ADDR)后;竟然又执行了printf("%x",flag);更严重的是读到的FLASH_ADDR_UPDATE_FLAG变成了0xFFFF;好像APP代码段被格式化了一样
调试
int main(void) {
u8 t;
u16 flag;
u16 oldcount=0;
u16 applenth=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
uart_init(9600);
LED_Init();
flag = STMFLASH_ReadHalfWord(FLASH_ADDR_UPDATE_FLAG);
printf("%x",flag);
while(1)
{
if(flag==0x1111)
{
printf("%x",0x2222);
iap_load_app(FLASH_APP1_ADDR);//Ö′DDFLASH APP′úÂë
}
if(USART_RX_CNT)
{
if(oldcount==USART_RX_CNT)//DÂÖüÆúÄú,ûóDêÕμ½èÎoÎêy¾Y,èÏÎa±¾′Îêy¾Y½óêÕíê3é.
{
applenth=USART_RX_CNT;
printf("¿a꼸üDÂ1ì¼t...
");
delay_ms(300);
printf(".");
delay_ms(300);
printf(" .");
delay_ms(300);
printf(" .
");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//ÅD¶ÏêÇ·ñÎa0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//¸üDÂFLASH′úÂë
printf("1ì¼t¸üDÂíê3é!!!
");
printf("¿aê¼ÔËDDAPP!!!
");
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//ÅD¶ÏêÇ·ñÎa0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//Ö′DDFLASH APP′úÂë
}
else
{
printf("·ÇFLASHó|óÃ3ìDò,ÎT·¨Ö′DD!
");
}
}
else
{
printf("·ÇFLASHó|óÃ3ìDò!
");
}
oldcount=0;
USART_RX_CNT=0;
}
else
oldcount=USART_RX_CNT;
}
t++;
delay_ms(20);
if(t==60)
{
LED2=!LED2;
t=0;
}
}
}
问题已解决,我在APP里调整了一下在FLASH为0x08030000 的地方写了FLASH_ADDR_UPDATE_FLAG的位置。但是还不知道具体什么问题,现在APP复位跳转到bootloader的时候打印2次0x1111,然后打印0X2222,然后可以跳回APP了,没有了之前的错误
一周热门 更多>