[讨论] STM32F105 USB管脚Vbus的处理

zhaojun_xf   2014-1-4 15:58 楼主
       对于STM32F105/107来说,为了监测USB的连接问题,程序默认是通过Vbus管脚进行检查的。但是Vbus管脚和UART1的TXD复用,导致我们在使用UART1发送数据时候,USB重启的问题。为了解决这个问题,本人查了大量的资料和咨询了不太靠谱的STM32技术支持,一直没有得到解决的方法。

      在STM32F105数据手册上是这样说的“如果另一个共享的外设要使用OTG_FS_VBUS引脚(PA9)或把它作为通用I/O口,必须激活PHY的断电模式(清除OTG_FS_GCCFG寄存器的位16)。”这个位在程序中的定义如下:
  1.   gccfg.d32 = 0;
  2.   gccfg.b.vbussensingB = 1;
  3.   gccfg.b.pwdn = 1;

位16即为pwdn,在程序中把这个为清零后USB根本不会去检查USB枚举,完全无法实现USB通信,所以根据手册解决是不行的。

      我们都知道STM32F103是通过在D+管脚上加入上拉电阻实现软连接的,那么同样在这个管脚上进行软连接控制,初始化后直接把D+上拉,这样USB检查是没有问题了,同时在通过UART1的TXD发送数据时,由于D+已经被上拉,所以即使Vbus被拉低了但D+还是被拉高,过USB不会重启,从而实现了USB和UART1的共用。
我的博客

回复评论 (8)

大哥,你试过吗?为什么我对该寄存器操作后,出现硬件错误,它会到中断中的这里“void HardFault_Handler(void)”
点赞  2014-1-10 13:11
当然试过,出现这个错一般是内存溢出比较多。。。。
我的博客
点赞  2014-1-10 18:09
出现那个错误,一般确实是内存溢出,但这里不是,是因为我关了 gccfg.b.pwdn,USB模块掉电,去掉就不会了,我资料上说了,要想不接VBUS,就得让其内部供电,是通过配置 OTG_FS_GCCFG寄存器的NOVBUSSENS位,但我的手册中,没看见这位的定义!不定义,就不能自动上拉PD,在没有外部上拉的情况下,不能通知主机枚举。关键是我通过软件断开上拉和连接上拉,居然都没反应。
点赞  2014-1-12 12:18
你要注意程序版本,不同的版本程序对Vbus的处理是不同的,我这个没有清位,只是想STM32F103一样通过端口控制D+上的上拉电阻。
我的博客
点赞  2014-1-13 08:15
跟帖~
点赞  2015-2-12 08:55
好的彭友
点赞  2015-3-2 21:21
好的pengyou
点赞  2015-3-2 21:21
STM32F107VC  没有引出串口,但是vbus管脚必须接5v才能被主机识别,
如果不接5v,软连接将的d+上拉,也不能识别,是否有成功案例?
点赞  2016-4-27 22:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复