请教一个stm32的USB的问题

2020-01-01 17:48发布

程序从0x08000000地址开始运行的话,没问题
自己做了个U盘升级程序,就是把单片机模拟成U盘,应用部分从0x08003800开始运行,当运行到USB配置时,单片机就会卡死。

分析反汇编代码,应该是进入了一个死循环。0x0800011A E7FE      B        0x0800011A值 ; @0x080000FC


请教各位,这是什么原因。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
cumthe
1楼-- · 2020-01-02 12:22
 精彩回答 2  元偷偷看……
cumthe
2楼-- · 2020-01-02 14:24
lidai0302 发表于 2016-8-3 16:17
在跳转之前需要把中断都关掉,还有Boot里面用到的硬件外设要恢复到复位时的状态,这样才能保证和你分开运行 ...

确定程序跑到了   B Default_Handler
graycker
3楼-- · 2020-01-02 17:32
跳转之前断开USB,关中断。应用程序里初始化的部分最好不要有多余的东西,比如未使用但是开启的外设(程序复杂的时候这个比较容易导致问题,特别是中断),在while(1)开始加这句
if (bDeviceState != CONFIGURED)   
    {
     //   if (bDeviceState == SUSPENDED)
      continue;
    },关掉开门狗再试一下
leafstamen
4楼-- · 2020-01-02 22:55
cumthe 发表于 2016-8-3 17:34
定时器中断是没问题的。

那是因为你在boot里也有定时器,跑不飞。
cumthe
5楼-- · 2020-01-03 00:57
graycker 发表于 2016-8-3 17:54
跳转之前断开USB,关中断。应用程序里初始化的部分最好不要有多余的东西,比如未使用但是开启的外设(程序 ...

将应用中USB的初始化程序改了改位置,现在中断跑到boot的USB中断里了,好像NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x3800);对USB没什么作用。
cumthe
6楼-- · 2020-01-03 02:15
 精彩回答 2  元偷偷看……

一周热门 更多>