本帖最后由 cry1109 于 2020-12-25 10:45 编辑
前段时间发的USB识别U盘太少的求助帖,在网上搜了一下,发现用CubeMX配置USB的也遇到过同样的问题。经过这几天的摸索问题已解决,希望这个帖子能帮到遇到同样问题的同学。
手上有两块板子,一块407一块107,407识别U盘的几率很大,想着407毕竟M4内核性能比107强太多,107能识别的U盘少只是芯片的原因所以就没去仔细对比两个芯片的USB驱动程序。后来找了STM32F1系列的BSP包里的USB-MSC的例程,把例程里的USB驱动和CubeMX生成的USB驱动对比,发现USB初始化里的USBH_LL_Init()函数有不同的地方:
上面屏蔽掉的代码是CubeMX生成的,下面的是BSP例程里的代码,可以发现初始化配置有所不同,索性就把BSP例程里的初始化代码替换成CubeMX生成的,下载、插上U盘,终于一直识别不了的U盘能够正常识别了,一口气换了快10个U盘都能够正常识别。
然后又重新打开407的程序,找到USBH_LL_Init()函数:
对比3个USBH_LL_Init()函数,就只有107的CubeMX代码没有hhcd_USB_OTG_FS.Init.phy_itface = USB_OTG_EMBEDDED_PHY这项初始化,而正式因为没有这个初始化导致USB识别的枚举U盘时一直不通过,加上这行代码后能够识别的U盘至少在95%以上,亲测的10多个U盘都能正常识别,U盘格式改为FAT32后都够正常读写U盘。 |