STM32MINI板串口IAP加载APP后,关机重启加载APP失败

2019-08-17 09:08发布

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;                 
                                }             
                }
}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
佳华daydayup
1楼-- · 2019-08-17 12:36
正点原子 发表于 2017-6-8 20:41
先一个个问题解决。你这个标志读写,正常么?

问题已解决,我在APP里调整了一下在FLASH为0x08030000 的地方写了FLASH_ADDR_UPDATE_FLAG的位置。但是还不知道具体什么问题,现在APP复位跳转到bootloader的时候打印2次0x1111,然后打印0X2222,然后可以跳回APP了,没有了之前的错误
正点原子
2楼-- · 2019-08-17 17:31
先一个个问题解决。你这个标志读写,正常么?

一周热门 更多>