打印
[信息]

【实战经验】STM32 USBD VBUS GPIO

[复制链接]
3126|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-11 14:05 编辑

STM32 USBD VBUS PA9 as GPIO

前言
某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。

一、现象的复现
硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:

对于硬件,客户的示意图如下:


所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ;

1.1 PA9为通用输出GPIO,未使用USB FS模块
配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出;


1.2 PA9为输出GPIO,开漏模式,使用USB FS模块
使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。
测试发现,如果配置:
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出;
如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出;
客户的问题被发现。


1.3 PA9为输出GPIO,推挽模式,使用USB FS模块
使用该MCU的USB FS 设备IP,并且配置PA9为输出,push-pull推挽模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:只需要设置NOVBUSSENS setting(bit21)为1,那么PA9 就会被输出为 3V3,而不论OTG_FS_GCCFG(offset_0x038)寄存器的内容是0xXX25XXXX还是 0xXX2DXXXX;

1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块
配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。

1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块
配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,使用了MCU的USBD FS外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为2V;
如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9输入为3V3;
客户的现象也被发现了。

二、解决及总结
在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。
如果配置成为通用的GPIO,在该芯片参考手册中,我们发现:


在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。
通过具体的上述的操作,可以知道,如果想让USBD模块下的PA9作为GPIO口使用,那么需要满足下面两个条件:
1/由于使用到了PA9作为通用的GPIO口,我们需要关闭VBUS sensing(bit 21)功能.
2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
客户按照上述重新配置后,问题不再出现。


对应的PDF: STM32 USBD VBUS GPIO
更多实战经验请看:【ST MCU实战经验汇总贴】

沙发
mmuuss586| | 2017-6-28 17:36 | 只看该作者
学习下

使用特权

评论回复
板凳
Xflyan| | 2017-6-28 21:44 | 只看该作者
mark!

使用特权

评论回复
地板
woai32lala| | 2024-1-31 21:20 | 只看该作者
学习

使用特权

评论回复
5
woai32lala| | 2024-1-31 21:21 | 只看该作者
现在也遇到这个问题,上拉4.7K电阻,输出2.6V左右,更换为2K,输出3.3V左右,不知道是不是这个问题

使用特权

评论回复
6
liang_ke| | 2024-8-7 10:14 | 只看该作者
因为使用DFU模式下载,且没注意到usb和uart1冲突而没加上拉电阻,发现pa9电平中有1V,将其拉高以后能正常识别到usb设备,使用楼主的办法将复位bit18和19,置位bit21后pa9的电压为3.3V,但是无法识别usb设备,usb的D+没有上拉1.5K,求软件上的解决方案...

使用特权

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

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17106

帖子

287

粉丝