OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3541|回复: 2

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

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-6-8
在线时间
0 小时
发表于 2017-6-8 17:34:02 | 显示全部楼层 |阅读模式
1金钱
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...\r\n");
                                                        delay_ms(300);
                                                        printf(".");
                                                        delay_ms(300);
                                                        printf("  .");
                                                        delay_ms(300);
                                                        printf("  .\r\n");                                                       
                                                        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é!!!\r\n");
                                                                printf("¿aê¼ÔËDDAPP!!!\r\n");
                                                        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!\r\n");                                  
                                                                }                                                                         
                                                        }
                                                        else
                                                                {                                                                                               
                                                                        printf("·ÇFLASHó|óÃ3ìDò!\r\n");
                                                                }
                                                        oldcount=0;
                                                        USART_RX_CNT=0;                               
                                                }
                                        else
                                                oldcount=USART_RX_CNT;                       
                                        }
       
                        t++;
                        delay_ms(20);
                        if(t==60)
                                {
                                        LED2=!LED2;
                                        t=0;                 
                                }             
                }
}





最佳答案

查看完整内容[请看2#楼]

问题已解决,我在APP里调整了一下在FLASH为0x08030000 的地方写了FLASH_ADDR_UPDATE_FLAG的位置。但是还不知道具体什么问题,现在APP复位跳转到bootloader的时候打印2次0x1111,然后打印0X2222,然后可以跳回APP了,没有了之前的错误
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-6-9
在线时间
2 小时
发表于 2017-6-8 17:34:03 | 显示全部楼层
正点原子 发表于 2017-6-8 20:41
先一个个问题解决。你这个标志读写,正常么?

问题已解决,我在APP里调整了一下在FLASH为0x08030000 的地方写了FLASH_ADDR_UPDATE_FLAG的位置。但是还不知道具体什么问题,现在APP复位跳转到bootloader的时候打印2次0x1111,然后打印0X2222,然后可以跳回APP了,没有了之前的错误
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-8 20:41:42 | 显示全部楼层
先一个个问题解决。你这个标志读写,正常么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-18 17:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表