原子哥求助啊——关于 IAP 转跳错误的问题

2019-07-20 11:47发布

我使用 STM32_USB-Host-Device_Lib_V2.1.0 的官方历程,裁剪了一个usb的虚拟串口,没有问题良好运行。
然后 在此基础上写了个bootloader,数据传输无误。就是最后 每次运行到 jump2app();  就死掉。。
为了验证我的FLASH 写错没有,我直接用JLINK 在0x8010000的地方烧了个历程,然后不初始化USB_VCP ,就直接转跳APP 没有问题 直接运行。。。。
然后发现是 虚拟串口 初始化 与  if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) {  jump2app=(iapfun)*(vu32*)(appxaddr+4);  MSR_MSP(*(vu32*)appxaddr);      jump2app();     } 冲突。
最后 发现 把USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32); 这句话 注销掉,就可以 转跳APP并运行APP。但是 虚拟串口不可识别。
原子哥 怎么办啊?怎么解决这个问题啊?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
正点原子
1楼-- · 2019-07-20 15:04
你跳转过去以后,把MCU的外设全部复位一遍,再开始其他代码初始化。试试
1653869339
2楼-- · 2019-07-20 19:09
正点原子 发表于 2017-6-14 20:48
你跳转过去以后,把MCU的外设全部复位一遍,再开始其他代码初始化。试试

谢谢 原子哥,是我 虚拟串口 没有关闭 就 死了。。。我再转跳前 把 VCP 关了 就可以了
2246606206
3楼-- · 2019-07-20 23:55
 精彩回答 2  元偷偷看……
1653869339
4楼-- · 2019-07-21 05:21
 精彩回答 2  元偷偷看……
2246606206
5楼-- · 2019-07-21 08:12
1653869339 发表于 2017-9-25 11:16
看 你用的 标准库 还是HAL库,HAL库有个直接关闭外设的 函数 你自己调用一下 就可以了,标准库的话 VCP  ...

已经解决,我是用的标准库。我的问题是在IAP中使用了中断,我在跳转之前清除中断并关闭,在APP中  打开中断就可以正常使用了。这是最关键的。如果不清除中断会保留到APP中去,如果你在APP中不使用中断就没事,使用就会跑飞

一周热门 更多>