STM32
直播中

李志静

8年用户 1502经验值
私信 关注
[问答]

stm32F4为什么不能同时接两个usb device呢?

STM32F4为什么不能同时接两个usb device,我的板子上有nandflash和sd卡,我想同时使用两个做u盘,在file_config如果nand和memorry card同时选择,编译会出错 如下#elif (__DEF  gt; 1) #error multiple default drives enabled #endif,即使我修改编译选项 lif (__DEF  gt;2) ,可以通过,但这时计算机已经无法找到u盘了,难道不能同时用两个u盘吗,我用的是RL的库。[/td]
以下内容为评论
[td]1、如果要使用2个U盘,需要使用USB的复合设备的功能,在枚举的时候枚举出两个设备,而不能直接通过修改宏来实现, 具体就看看usb枚举的代码吧。
2、你还没有理解u盘为什么能工作,
   在电脑上看到两个U盘通过0号端点来枚举
   读写U盘通过1个输入 一个输出端点来实现数据读写;
   如果有多个U盘,在0好端点要做两套描述符;  读写端点要增加2个(1个读端点,一个写端点)
3、建议多看看usb协议

回帖(1)

杨海清

2024-5-18 17:34:02
STM32F4不能同时接两个USB设备的原因主要有以下几点:

1. **硬件限制**:STM32F4系列微控制器通常只有一个USB控制器,这意味着它只能同时支持一个USB设备。如果你想要同时使用两个USB设备,你需要使用具有多个USB控制器的微控制器,或者使用外部USB集线器。

2. **固件限制**:你提到的错误信息 `#elif (__DEF gt 1) #error multiple default drives enabled #endif` 表示你的固件配置只允许一个默认驱动。这意味着你的固件设计为只支持一个USB设备。要支持多个USB设备,你需要修改固件以支持复合设备(Composite Device)。

3. **USB复合设备**:要实现同时使用两个USB设备,你需要使用USB复合设备的功能。这意味着你需要在枚举过程中枚举出两个设备,而不是通过修改宏来实现。这通常涉及到修改固件中的USB描述符和配置。

4. **库的限制**:你提到使用的是RL的库,这个库可能没有提供支持多个USB设备的功能。你可能需要寻找其他支持复合设备的库,或者自己修改现有库以支持多个设备。

5. **操作系统兼容性**:即使硬件和固件都支持多个USB设备,操作系统也需要能够识别和处理复合设备。在某些情况下,操作系统可能无法正确识别或处理复合设备,导致无法正常使用。

综上所述,要实现STM32F4同时使用两个USB设备,你需要解决硬件限制、固件限制、库的限制以及操作系统兼容性问题。这可能涉及到更换硬件、修改固件、寻找或修改库以及确保操作系统兼容性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分