问答

汇集网友智慧,解决技术难题

21ic问答首页 - STM32F105RC USB ,一直在SOF这里中断。

原因 ma STM32F105 rc USB U盘

STM32F105RC USB ,一直在SOF这里中断。

Progrime2024-06-17
STM32F105RC USB 配置成Mass Storage Class,插上U盘,一直在SOF这里中断,请问是什么原因,谢谢!

回答 +关注 2
7518人浏览 13人回答问题 分享 举报
13 个回答
  • 可能是硬件连接问题
  • 检查连接的USB主机(如计算机)是否支持USB Mass Storage Class,并确保其USB端口和驱动程序正常工作。
  • 固件/代码问题
  • 可能是硬件连接问题
  • cubemx不是自动初始化啊
  • gyh974 发表于 2024-6-18 15:42
    不都是CUBE自动生成的?基本上不用改的

    搞到最后是他没有使能
  • 不都是CUBE自动生成的?基本上不用改的
  • 调试打印信息如下:
    USB Device Connected
    USB Device Reset Completed
    PID: 1212h
    VID: 14cdh
    Address (#1) assigned.
    Manufacturer : Generic
    Product : Mass Storage Device
    Serial Number : 121220160204
    Enumeration done.
    This device has only 1 configuration.
    Default configuration set.
    Switching to Interface (#0)
    Class    : 8h
    SubClass : 6h
    Protocol : 50h
    MSC class started.
    Number of supported LUN: 1
    LUN #0:
    Inquiry Vendor  : Mass   
    Inquiry Product : Storage Device  
    Inquiry Version : 1.00
    MSC Device ready
    MSC Device capacity : 3046637056 Bytes
    Block number : 31116287
    Block Size   : 512
  • 玄德 发表于 2024-6-18 11:05
    USB 机制,主机会定时查询子机。
    想想看,U盘拔出来以后,电脑很快就知道了,为什么。
    FS 模式每毫秒一次 ...

    终于搞定,谢谢大侠的正解,这个中断是必要,而且正常的。
    解决过程如下,供后来者参考:
    我的问题是:USBH_UserProcess函数中,插入U盘一直到不了case HOST_USER_CLASS_ACTIVE:
    8M晶振换到20M的也不行,DN/DP加上接下拉也不行,开不开freeRTOS都不行,几乎cube相关配置都改过了,一如既往的不行。
    于是cube打开调试模式,等级为3:All messages and internal debug messages are shown,插上U盘后,惊奇的发现串口打印USB Device Connected,于是在工程里搜索到打印USB Device Connected的地方(usbh_core.c),打印这句话后,phost->gState = HOST_DEV_WAIT_FOR_ATTACHMENT; 再定位到这句话下面几行处:case HOST_DEV_WAIT_FOR_ATTACHMENT: /* Wait for Port Enabled */
    发现需要phost->device.PortEnabled==1,才能正确往下走,在工程里搜索phost->device.PortEnabled,发现它在其它地方都是被=0的,而在void USBH_LL_PortEnabled(USBH_HandleTypeDef *phost)函数里被置1,在此函数里打不了断点,说明没被使用(调用)过。
    试图在void MX_USB_HOST_Init(void)函数的最后/* USER CODE BEGIN USB_HOST_Init_PostTreatment*/与/* USER CODE END USB_HOST_Init_PostTreatment */之间,加上USBH_LL_PortEnabled(&hUsbHostFS);
    编译通过,下载仿真,插上U盘,终于可以运行到USBH_UserProcess函数里的case HOST_USER_CLASS_ACTIVE:处。
    这样就可以正常操作U盘了。
12下一页

您需要登录后才可以回复 登录 | 注册