stm32F105RC6 U盘升级实验 跳转APP后中断出错问题

在STM32F105的U盘升级实验中,遇到Bootloader跳转到APP后进入错误中断的问题。已实现USB Host功能和FATFS文件系统,升级过程涉及读取U盘.bin文件并写入FLASH。问题出现在跳转后,APP的中断向量表设置似乎无效,即使在APP中用SCB->VTOR重新设置偏移也无济于事。关闭中断可以避免错误,但开启中断时又会触发Default_Handler。研究发现USB库中的SCB->VTOR设置可能影响了中断向量表。
摘要由CSDN通过智能技术生成

最近在做STM32F105的U盘升级功能,其中bootloader中的FLASH写入,APP跳转等均参考了正点原子的F1串口IAP实验。值得注意的是F103的USB是不带HOST功能的,上次做的INIT Kit小板就使用了103的芯片,导致没办法加U盘升级功能。

在移植好USB Host 功能后(F1的usb打算后续专门写一篇,这里就不介绍移植的工作了),移植FATFS文件系统,然后测试能够成功识别U盘,挂载文件系统,打开关闭文件等。U盘升级实际上就是通过USB host功能,从U盘的指定文件中读取KEIL生产的.bin文件,然后写入32内部FLASH。如果USB Host功能没问题后,基本上就剩下APP程序中断向量表的偏移了。

这次项目进行过程中,Bootloader程序完成后,发现在跳转到APP程序后会进入Default_Handler这个错误中断里。并且是0X8000000的地址的Default_Handler(APP程序从0x8010000开始,有APP自己的中断向量表)。在APP程序中已经设置了如下代码的地址偏移,并且Keil中也都设置过了。.map文件的也能看到地址已经变了。

SCB->VTOR = FLASH_BASE | 0x10000;

在跳转程序前,使用__disable_irq()关闭所有中断则不会进入Default_Handler,但是如果在APP程序中使用__enable_irq()开启中断就又会进入Default_Handler,所以判断问题出现中断向量表的偏移上。但是已经在APP程序的最开始使用了SCB->VTOR重新设置过偏移了。

最后在全局搜索SCB->VTOR,发现在F1的USB库里面有这样一段代码


                
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值