打印
[STM32F4]

请教STM32F4的2个USB(Host+Device)是否可以同时使用?

[复制链接]
21923|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yixin1851|  楼主 | 2014-8-19 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠:
   STM32F4的2个USB是否可以同时使用呢?HS的作为Device,FS的作为Host。
   目前正在进行项目评估,做过的指点一二。
   期待香版指点。
   非常感谢!
沙发
STARM| | 2014-8-19 17:05 | 只看该作者
>> STM32F4的2个USB是否可以同时使用

STM32Cube_FW_F4_V1.3.0 提供了两个例子

DualCore_Standalone USB Host Dual Core example

This is a typical example on how to use the STM32F4xx USB OTG Host peripheral to operate with an USB MSC
device connected to the High Speed port and a HID device connected to the Full Speed port.

DualCore_Standalone USB Device Dual Core example

This is a typical example on how to use the STM32F4xx USB OTG Device peripheral, where STM32 is
enumerated as a MSC device in the High Speed mode, and also as a HID device in the Full Speed mode,
using the native PC Host HID/MSC drivers to which the STM324xG-EVAL board is connected.

HS的作为Device,FS的作为Host 理论上是可行的

使用特权

评论回复
板凳
yixin1851|  楼主 | 2014-8-19 19:05 | 只看该作者
STARM 发表于 2014-8-19 17:05
>> STM32F4的2个USB是否可以同时使用

STM32Cube_FW_F4_V1.3.0 提供了两个例子

感谢回复
官方有没有一个USB作为HOST,另一个USB作为device的例子呢?
我自己改了一个,编译过了,但是HOST与DEVICE 都不成功。

使用特权

评论回复
地板
STARM| | 2014-8-19 19:34 | 只看该作者
先单独测试HOST或者DEVICE, 通过之后尝试整合

使用特权

评论回复
5
yixin1851|  楼主 | 2014-8-20 09:41 | 只看该作者
STARM 发表于 2014-8-19 19:34
先单独测试HOST或者DEVICE, 通过之后尝试整合

是的,单独程序都是OK的。
整合到一起后,分别调试HOST/DEVICE功能,都不行。
不知道是不是host与device代码有冲突。

使用特权

评论回复
6
yixin1851|  楼主 | 2014-8-22 11:03 | 只看该作者
整合了两天,没有搞定。
各位大侠有没有ST公司FAE的联系方式。
想直接问下FAE,host+device是否可以同时实现。
如果不行,下周就要换方案了。

使用特权

评论回复
7
想做大牛的小马| | 2014-8-22 12:47 | 只看该作者
当然可以!hs需要外接高速phy。。。问题现在出在什么地方?
看起来像硬件方面的问题,如果不搞清楚的话,换个方案可能同样出类似的问题。。。。~

使用特权

评论回复
8
yixin1851|  楼主 | 2014-8-25 09:25 | 只看该作者
想做大牛的小马 发表于 2014-8-22 12:47
当然可以!hs需要外接高速phy。。。问题现在出在什么地方?
看起来像硬件方面的问题,如果不搞清楚的话,换 ...

感谢回复
高速USB HID device(已外接USB3300),程序OK。
FS host 采用的是discovery开发板上U盘录音例子。
把这个两个合并到一起后,貌似只能用一个。
也是就HS HID枚举成功了,就无法进FS HOST的中断。
请大侠指点一二。

使用特权

评论回复
9
xiuwen89| | 2014-8-25 09:58 | 只看该作者
ST有个示例是FS 做device,HS 做host。在STM3240G-EVAL上试过两个同时接上,没问题。

使用特权

评论回复
评论
xiuwen89 2019-4-9 16:41 回复TA
@cuitstudent :装个STM32CubeMX,下F4的包,到里面找叫DualCore的示例。 
cuitstudent 2019-4-1 11:00 回复TA
大哥,例子可否发一下看看,毕设是这个现在407上带的那个口可以检测到,但是自己加的口检测不到 很难受 
10
yixin1851|  楼主 | 2014-8-25 13:13 | 只看该作者
xiuwen89 发表于 2014-8-25 09:58
ST有个示例是FS 做device,HS 做host。在STM3240G-EVAL上试过两个同时接上,没问题。 ...

感谢回复

使用特权

评论回复
11
kz_zank| | 2014-8-25 13:54 | 只看该作者
stm32f407 我公司用的全速模式  HS的作为Device,FS的作为Host 可以使用,只能告诉楼主这个结果 代码就没办法了

使用特权

评论回复
12
想做大牛的小马| | 2014-8-26 12:01 | 只看该作者
yixin1851 发表于 2014-8-25 09:25
感谢回复
高速USB HID device(已外接USB3300),程序OK。
FS host 采用的是discovery开发板上U盘录音例 ...

建议先单独使用st提供的FS host示例试试,调试OK后,再把两个合一下~
先确认硬件没有问题,一般软件改改就好了~

使用特权

评论回复
13
bjxdylzsts| | 2014-8-26 16:55 | 只看该作者
我有 st 负责 usb的技术支持的联系方式,但是 他们说 不要乱给号码给别人。

使用特权

评论回复
14
STARM| | 2014-8-27 11:46 | 只看该作者
kz_zank 发表于 2014-8-25 13:54
stm32f407 我公司用的全速模式  HS的作为Device,FS的作为Host 可以使用,只能告诉楼主这个结果 代码就没办 ...

看来确实可以同时使用的, 具体怎么做要自己研究了

使用特权

评论回复
15
yixin1851|  楼主 | 2014-8-27 15:15 | 只看该作者
本帖最后由 yixin1851 于 2014-8-27 15:27 编辑
kz_zank 发表于 2014-8-25 13:54
stm32f407 我公司用的全速模式  HS的作为Device,FS的作为Host 可以使用,只能告诉楼主这个结果 代码就没办 ...


感谢您这个结果
我现在情况是这样的,如果PC识别到USBDEVICE(一个端点输入0x81,一个端点输出0x01),host就会失败。
如果先不连接PC,host会成功,但是将USB DEVICE连接到PC,只要PC识别到了device,host就会disconnect。
USB DEVICE只要被PC识别,就会进入以下中断:
  /* Handle Host Port Interrupts */
    if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_HPRTINT))
    {
       HCD_Port_IRQHandler (hhcd);
    }
进而执行以下代码:
else
    {
      /* Cleanup HPRT */
       USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET |\
       USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG );
      
       USB_UNMASK_INTERRUPT(hhcd->Instance, USB_OTG_GINTSTS_DISCINT);
    }   
然后就disconnect了。

我用STM32F4CUBE生成的代码。
没有头绪了,忘指点一二。

另外说明一点:
采用STM32F4CUBE生成代码,不开device端点的中断,不初始化端点。host是可以的,而且PC也可以找到USB device,但是不能收发数据。

使用特权

评论回复
16
yixin1851|  楼主 | 2014-8-27 15:21 | 只看该作者
bjxdylzsts 发表于 2014-8-26 16:55
我有 st 负责 usb的技术支持的联系方式,但是 他们说 不要乱给号码给别人。 ...

感谢回复
能私信给我吗?

使用特权

评论回复
17
想做大牛的小马| | 2014-8-27 17:18 | 只看该作者
yixin1851 发表于 2014-8-27 15:15
感谢您这个结果
我现在情况是这样的,如果PC识别到USBDEVICE(一个端点输入0x81,一个端点输出0x01),ho ...

很高大上啊都用cube了,直接用STM32Cube_FW_F4_V1.3.0带的示例application代码跑一下好了~

使用特权

评论回复
18
yixin1851|  楼主 | 2014-8-28 09:27 | 只看该作者
想做大牛的小马 发表于 2014-8-27 17:18
很高大上啊都用cube了,直接用STM32Cube_FW_F4_V1.3.0带的示例application代码跑一下好了~ ...


惭愧,不懂USB协议栈,只有用CUBE这样集成的工具了。
目前独立跑没有问题,但是合在一起。只要PC识别到了USB DEVICE,host就歇菜了。
只要从PC拔掉USB,Host立马又活了~
纠结~,不知道哪里出了问题。

另外,示例中没有我需要的程序。

使用特权

评论回复
19
想做大牛的小马| | 2014-8-28 09:44 | 只看该作者
yixin1851 发表于 2014-8-28 09:27
惭愧,不懂USB协议栈,只有用CUBE这样集成的工具了。
目前独立跑没有问题,但是合在一起。只要PC识别到了 ...

(⊙o⊙)…。。HS和HS无论是软件还是硬件上都是独立的啊。。。看你这个情况,像是相互干扰了一下,
仔细查一下代码看看两者之间是否有耦合。。。如果你用cube的代码的话,应该是两个结构体,如
USBD_HandleTypeDef USBD_Device;
USBH_HandleTypeDef hUSBHost;

使用特权

评论回复
20
yixin1851|  楼主 | 2014-8-28 12:33 | 只看该作者
想做大牛的小马 发表于 2014-8-28 09:44
(⊙o⊙)…。。HS和HS无论是软件还是硬件上都是独立的啊。。。看你这个情况,像是相互干扰了一下,
仔细查 ...

感谢回复
只要PC识别usb device,就会触发以下中断:
/* Handle Host Disconnect Interrupts */
    if(__HAL_HCD_GET_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT))
    {
      
      /* Cleanup HPRT */
      USBx_HPRT0 &= ~(USB_OTG_HPRT_PENA | USB_OTG_HPRT_PCDET |\
        USB_OTG_HPRT_PENCHNG | USB_OTG_HPRT_POCCHNG );
      
      /* Handle Host Port Interrupts */
      HAL_HCD_Disconnect_Callback(hhcd);
       USB_InitFSLSPClkSel(hhcd->Instance ,HCFG_48_MHZ );
      __HAL_HCD_CLEAR_FLAG(hhcd, USB_OTG_GINTSTS_DISCINT);
    }
从而导致Host歇菜,拔掉usb host就OK了。

我现在在找为什么PC识别到USB device,为什么会导致以上中断?

使用特权

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

本版积分规则

2

主题

23

帖子

0

粉丝