[AT32F415] boot跳转到app后初始化usb会出现卡死异常

[复制链接]
1816|3
 楼主| ccxzjz 发表于 2021-12-21 09:15 | 显示全部楼层 |阅读模式
dc, CD, AC, AD, App, boot
1、单独跑APP,运行正常。2、把usb cdc初始化的函数去掉,boot跳转到app,运行也正常。
一旦初始化了usb,就直接卡死在usb那。
2.png
boot的跳转函数用的官方bsp里的升级demo里的代码:
  1. void IAP_Jump(uint32_t dwAddr)
  2. {
  3.     uint32_t dwStkPtr, dwJumpAddr;
  4.     uint32_t i = 0;
  5.     dwStkPtr = *(UINT32 *)dwAddr;
  6.     dwJumpAddr = *(UINT32 *)(dwAddr + sizeof(UINT32));
  7.     if ((dwStkPtr < SRAM_BASE) || ((dwStkPtr & 0xFF000000) != SRAM_BASE || (dwJumpAddr < FLASH_APP1_ADDR) || ((dwJumpAddr & 0xFF000000) != FLASH_BASE)))
  8.         return;
  9.     for (i = 0; i < 1000000; i ++)
  10.     {
  11.         __NOP();
  12.     }
  13.     RCC->APB2RST = 0xFFFF;
  14.     RCC->APB2RST = 0;
  15.     RCC->APB1RST = 0xFFFF;
  16.     RCC->APB1RST = 0;
  17.     RCC->APB2EN = 0;
  18.     RCC->APB1EN = 0;
  19.     RCC->AHBRST = 0xFFFF;
  20.     RCC->AHBRST = 0;
  21.     BIT_SET(RCC->CTRL, RCC_CTRL_HSIEN);
  22.     /* Reset SW, AHBPSC, APB1PSC, APB2PSC, ADCPSC and CLKOUT bits */
  23.     BIT_CLEAR(RCC->CFG, RCC_CFG_SYSCLKSEL | RCC_CFG_AHBPSC | \
  24.               RCC_CFG_APB1PSC | RCC_CFG_APB2PSC | \
  25.               RCC_CFG_ADCPSC | RCC_CFG_CLKOUT);
  26.     /* Reset HSEEN, HSECFDEN and PLLEN bits */
  27.     BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEEN | RCC_CTRL_HSECFDEN | \
  28.               RCC_CTRL_PLLEN);
  29.     /* Reset HSEBYPS bit */
  30.     BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEBYPS);

  31.     /* Reset PLLRC, PLLHSEPSC, PLLMUL, USBPSC and PLLRANGE bits */
  32.     BIT_CLEAR(RCC->CFG, RCC_CFG_PLLRC | RCC_CFG_PLLHSEPSC | \
  33.               RCC_CFG_PLLMULT | RCC_CFG_USBPSC | RCC_CFG_PLLRANGE);
  34.     /* Disable all interrupts and clear pending bits  */
  35.     RCC->CLKINT = RCC_CLKINT_LSISTBLFC | RCC_CLKINT_LSESTBLFC | \
  36.                   RCC_CLKINT_HSISTBLFC | RCC_CLKINT_HSESTBLFC | \
  37.                   RCC_CLKINT_PLLSTBLFC | RCC_CLKINT_HSECFDFC;

  38.     SET_MSP(dwStkPtr);
  39.     pfTarget = (void (*)(void))dwJumpAddr;
  40.     pfTarget();
  41. }
boot跳转到app的地址是0x0800A000,
app里重定位向量表
1.png
请教大家,哪里有问题,提供个思路

muyichuan2012 发表于 2021-12-21 13:35 | 显示全部楼层
本帖最后由 muyichuan2012 于 2021-12-21 19:21 编辑

你好,415 BSP里  AT-START-F415\Examples\OTG_Device\VirturalMassStorage_IAP_Demo 有现成demo讲解如何跳转,可以参考一下
还有HID_IAP_Demo 也可以


 楼主| ccxzjz 发表于 2021-12-22 09:29 | 显示全部楼层
找到原因了,这里又设置了向量表

1.png
084425 发表于 2021-12-22 23:46 | 显示全部楼层
跳转之前关闭中断等,另外进app之间拉低一段时间USB信号,保证PC有足够时间重新枚举
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部