打印
[STM32F4]

使用F4 USB端口碰到问题及对策(一)

[复制链接]
1172|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2015-3-18 13:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    近期一个在研的项目中MCU使用64p F405,主要利用其FS OTG端口作为Host访问外接的U盘,另一个HS OTG端口作为Device 构造一个虚拟串口,实际使用的是Full Speed。
   
    开发中的USB驱动代码完全复制ST提供的Demo, 库函数为V2.1, 但是发现了如下问题:

    1. 如何节省掉 PA9 和 PB13 引脚,在ST的Demo中,这两个引脚是用于接Vusb的,那么简单的注释掉VBUS_SENSING_ENABLED就可以 办到吗?
     至少PB13还是不能作为外中断使用,单步看PB13的配置并没有受到USB初始化的影响。进一步跟踪程序发现问题与 OTG_HS_GCCFG 寄存器的配置有关,按照F4的手册,其中有3个相关联的标志位:
   
  GCCFG.18: VBUSASEN    // Enable the VBUS sensing “A” device (USB Host)
   GCCFG.19: VBUSBSEN    // Enable the VBUS sensing “B” device (USB peripheral)
   GCCFG.21: NOVBUSSENS  // VBUS sensing disable
   
   在 usb_core.c 中有对其赋值, 3个位都赋值为'1',经试验将 VBUSBSEN为赋值为0,那么 PB13可以使用了, 且不影响虚拟串口使用。
   
   usb_core.c 中的 gccfg.b.vbussensingB=1  这是关键语句,将其改为 gccfg.b.vbussensingB=0,即可。
   
   如果不想改动usb_core.c 可以在USB的初始化函数后,外加一个补丁:
      USBD_Init(&USB_OTG_dev_HS, USB_OTG_HS_CORE_ID, &USR_desc_HS, &USBD_CDC_cb_HS,&USR_HS_cb );// 虚拟串口初始化
      USB_OTG_dev_HS.regs.GREGS->GCCFG &= ~0x00080000;  // 补丁

   似乎将 GCCFG.21: NOVBUSSENS 置为1,并不能彻底解放 PB13.

   比较有意思的是在 IAR 6.5的调试环境中,并不能看到有 NOVBUSSENS 位出现,难道是F4中并没有NOVBUSSENS 位?
   详见下图右侧的调试窗口。

PB13的利用.JPG (101.71 KB )

PB13的利用.JPG
沙发
icecut| | 2015-3-18 13:59 | 只看该作者
好吧,看样腿这么紧张....

使用特权

评论回复
板凳
zh113214| | 2015-3-19 21:27 | 只看该作者
在 usb_core.c 中有对其赋值, 3个位都赋值为'1',经试验将 VBUSBSEN为赋值为0,那么 PB13可以使用了, 且不影响虚拟串口使用。

使用特权

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

本版积分规则

145

主题

368

帖子

1

粉丝