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

[复制链接]
1443|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
icecut 发表于 2015-3-18 13:59 | 显示全部楼层
好吧,看样腿这么紧张....
zh113214 发表于 2015-3-19 21:27 | 显示全部楼层
在 usb_core.c 中有对其赋值, 3个位都赋值为'1',经试验将 VBUSBSEN为赋值为0,那么 PB13可以使用了, 且不影响虚拟串口使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部