打印

关于STM32的USB-IAP(DFU)无法跳转至应用程序

[复制链接]
4811|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zpithpl|  楼主 | 2012-5-3 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人根据stm32的USB固件,利用DFU已经将应用程序下载到自己的板子中去了,但程序运行后,虽然已经执行跳转到应用程序地址,但实际上并没有执行相应的程序,好像跳到了USB的中断里去了,哪位高手能够指点一下!万分感激!
沙发
vigia| | 2012-5-4 12:14 | 只看该作者
描述不清

到底有没有跳到应用程序?到底有没有跳到USB中断?

中断向量表地址有没有重新设过?
跳转之前有没有屏蔽中断?跳转之后有没有打开中断?

使用特权

评论回复
板凳
zpithpl|  楼主 | 2012-5-5 14:45 | 只看该作者
2# vigia
1、我也不确定到底有没有跳到应用程序,以下是代码,反应我单步调试时,程序执行到“Jump_To_Application();“语句后,就跑到USB中断里面去了。
2、程序中“USER_FLASH_START”是我的应用程序首地址。
另外中断向量表地址没有重新设,我看网上别人用的时候好像也没有重新设。
3、跳转之前在哪里屏蔽中断?跳转之后又在哪里设呢?

if (DFU_Button_Read() != 0x00)
  { /* Test if user code is programmed starting from address 0x8003000 */
if (((*(vu32*)USER_FLASH_START) & 0x2FFF0000 ) == 0x20000000)
    { /* Jump to user application */
      JumpAddress = *(vu32*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __MSR_MSP(*(vu32*) ApplicationAddress);
      Jump_To_Application();
    }   
  } /* Otherwise enters DFU mode to allow user to program his application */

使用特权

评论回复
地板
vigia| | 2012-5-7 13:47 | 只看该作者
LZ我觉得你需要补充些基本知识

比如中断向量表的作用

你在运行DFU程序的时候,有没有中断?这些中断处理程序在什么地址的?产生中断了,内核怎么知道要跳转到哪里执行中断处理程序?


你又去运行应用程序了了,你的应用程序有没有中断的?如果产生了中断,内核又应该跳到哪里去执行中断程序?


你没有屏蔽中断,那么在跳转过程中产生了中断,内核应该去哪里找相应的中断处理程序?

请考虑一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

27

帖子

0

粉丝