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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版