你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

DfuSe demo下载后无法跳转到APP

[复制链接]
dou_bi 提问时间:2016-5-10 15:34 /
        公司要求增加USB在线升级的功能。起初都很顺利,USB连接,程序下载都没有问题。最后的最后却出现了一个令人抓狂的问题:单独用KEIL下载IAP和APP都可以正常工作。拔掉调试线。反复上电,不管是进入IAP(按键进入)和APP,都正常。但是用DfuSe demo这个工具下载就无法正常进入APP。调试看,情况是在跳转APP-MAIN的时候取到了一个错误的地址。程序跑到FLASH异常中断的while(1)里去了。
        实在没办法,我不使用自己的APP。试着调试KEIL提供的例子,情况一样。
        程序的模板我用的是KEIL里自带的ST文件夹下的升级例子。查了很多网上的资料,也都是按照这个例子为模板修改的。
        我改动了以下内容:
        1.进入IAP按键的IO口,改成了我自己的。
        2.USB D+上拉引脚,改成了我自己的。
        3.IAP和APP工程的芯片型号 从 stm32f103ZE 改成了  stm32f103RB.
        4. 因为容量不一样 改了一下ROM区。IAP-0x8000000 SIZE 0x3000    APP-0x8003000 SIZE 0x1D00。
        5.APP里的中断向量首地址,原本例子就是写好的,偏移IAP的SIZE。
        (APP也是例子里提供的,很简单 就是让一个LED闪烁)
        然后就是正常的进入连接USB->转文件格式->下载并更新。不知道我这个改法哪里出了问题,或者是有什么需要注意的地方我没有注意到,一直是上面所说的问题。但是,我用KEIL单独下载都是正常的啊。求各位大神不吝赐教。
        因为小公司就我一个做设计的,公司也不给配网络,这不是我工作的电脑,所以没办法上图。本来应该上图的,实在抱歉。如果有人遇到过类似的问题或者知道问题的原因,请留言,我用U盘COPY切图过来。
        希望大家帮帮忙,老板的眼神已经很怪异了。

赞 收藏 1 评论22 发布时间:2016-5-10 15:34

举报

22个回答
dou_bi 回答时间:2016-5-10 16:31:43
安 发表于 2016-5-10 16:19
就是IAP跳转到APP的语句怎么写的?

        DFU_Button_Config();        //初始化跳转APP程序按键

        //检测是否进入DFU模式按键,开机没有按下则跳转到APP程序中执行
        if(DFU_Button_Read() == 0)
        {
                if(((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)       
                {
                        //跳转到APP地址开始执行,地址+4位置是复位中断入口
                        JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
                        Jump_To_Application = (pFunction) JumpAddress;

                        //设置APP程序堆栈指针
                        __set_MSP(*(__IO uint32_t*) ApplicationAddress);
                       
                        //跳转到APP程序中执行 ---- 到这一步都能进 ---- 再往下执行的时候就会读到一个错误的地      址然后跳转过去 酿成悲剧
                        Jump_To_Application();
                }
        }
dou_bi 回答时间:2016-5-10 16:39:59
我想大部分人第一次接触这个的时候 这一段都是抄的这一段 并不是第一天用MCU 在AVR上用串口也做过同样的升级功能,产品现在还在卖着。KEIL工具栏里不是有个DOWNLOAD按钮吗?我用那个按钮分别吧IAP和APP下载到板子上都可以正常工作。就是把HEX转了格式用DFUSE DEMO这个软件写进入 显示的是升级成功 但是就是不能进APP 如果开机的时候按升级按钮 倒是能成功进IAP(进入USB升级模式 我弄了个指示灯)如果不按升级按钮 本来吧 应该跑用户程序的。但是他就卡死在FLASH异常中断里。关键是 分别下载两个程序到板子。怎么弄都是好的。。。。哎
Kevin887766 回答时间:2016-10-11 20:39:27
zcl201207 发表于 2016-8-16 20:04
楼主问题解决了没?

我也遇到了类似的问题,DFU 中APP下载了但是总是校验失败。
找了很多资料,但是这个帖子给了我启发。
最终解决了,原因就是芯片不匹配。虽然使用的例程同为stm32f7系列的芯片,且FLASH都为1MB。
但是我所使用的具体型号同例程有不同于的分区sector 0,1,2,3... 地址不同,写Flash之后也就会校验失败。
使用官方例程之前,必须认真比较一下 usbd_conf usbd_desc usbd_dfu_flash 这三个 .c文件 和 .h文件。
根据自己的板子做差异化处理。
废鱼 回答时间:2016-5-10 16:19:24
就是IAP跳转到APP的语句怎么写的?
dou_bi 回答时间:2016-5-10 16:41:52
如果我表达的不清楚 我回头把东西整理下 连图片 程序一起发上来吧
shaoziyang 回答时间:2016-5-11 09:37:44
试过在STM32F4上用DfuSe升级,没有遇到这个问题。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

时光虫子 回答时间:2016-5-11 13:14:59
这个问题只有仿真看一下为啥进入异常,基本都没有遇到这种问题。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

废鱼 回答时间:2016-5-11 13:25:31
进入异常的原因,可能是跳转地址错误。楼主看一下跳转地址是否正确。

评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

xmshao 回答时间:2016-5-11 16:30:53
本帖最后由 xmshao 于 2016-5-11 16:34 编辑

楼主说IAP、APP单独都好好的。

那如果APP地址设置与IAP地址跳转都正确的话就不该有问题。

现在又有问题,可能IAP代码本身就有问题或者相关地址安排及跳转有问题。注意APP的VECTOR的设置。


评分

参与人数 1ST金币 +2 收起 理由
沐紫 + 2

查看全部评分

tanr 回答时间:2016-5-11 17:33:47
dou_bi 发表于 2016-5-10 16:41
如果我表达的不清楚 我回头把东西整理下 连图片 程序一起发上来吧

发一下图片吧,感谢万分
zcl201207 回答时间:2016-5-11 23:49:26
wtliu 回答时间:2016-5-12 11:27:00
解决了吗?这问题应该直追的。
dou_bi 回答时间:2016-5-12 18:35:58
tanr 发表于 2016-5-11 17:33
发一下图片吧,感谢万分

这就发 不管怎么样 谢谢你们帮忙处理问题
dou_bi 回答时间:2016-5-12 18:49:02
本帖最后由 dou_bi 于 2016-5-12 18:50 编辑

APP_MAIN.gif

IAP跳转和ROM分配.gif


KEIL相关设置.gif


步骤A.gif


DfuSe-demo.gif



APP_MAIN.gif
dou_bi 回答时间:2016-5-12 18:52:06
下班很久很久了 帖子弄的有点乱 基本要说明的东西我都写在图片上了
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版