打印
[其他ST产品]

解决方案:移植ST的USB驱动库到STM32F4用于MSC时(SD卡)无法识别到设备

[复制链接]
251|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

问题描述:

使用官方的USB驱动库,然后根据网上资料说的把该修改的地方修改了,按理说插上USB就应该能被电脑识别,但是实际测试发现一直无法识别。后面用cubemx生成该功能代码,并进行修改也不行,网上查找的资料很多是通过cubemx直接生成的,而且生成之后能直接使用。


使用特权

评论回复
沙发
欢乐家园|  楼主 | 2023-10-23 11:52 | 只看该作者
解决办法:

经过调试发现程序运行后最后会卡死在SDIO_PowerState_ON()函数中的“Hal_Delay(2)”这个语句中,位于SD卡的初始化函数中,而USB在HAL_PCD_SetupStageCallback()回调函数中会调用SD卡初始化函数,这个调用关系就会出现中断优先级嵌套问题,Hal_Delay依靠SysTick_Handle()中断服务函数,而USB回调函数又是被OTG_FS_IRQHandler()中断服务函数调用,因此当USB的中断优先级比Systick高时,会导致死在Hal_Delay中,因为Systick中断被高优先级的USB中断抢占了,导致无法延时。

使用特权

评论回复
板凳
欢乐家园|  楼主 | 2023-10-23 11:52 | 只看该作者
因此解决办法有如下几种:

1、将systick的中断优先级调整到比USB优先级更高

2、将Hal_Delay用定时器实现,但是建议不使用中断。

3、提前将SD卡初始化,然后用一个标志指示是否初始化。这样USB调用初始化时直接返回成功。

推荐使用第三种方法。

使用特权

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

本版积分规则

93

主题

889

帖子

1

粉丝