
STM32 USBD VBUS PA9 as GPIO 前言# p4 ^# ?4 r) [# H 某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。% c3 J" F$ O3 J3 g0 n # B, m2 G$ A3 E& O" V 一、现象的复现 硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:- N0 q! ]) X; c0 i7 ?2 C ![]() 对于硬件,客户的示意图如下:* N9 Q, t, Y5 P4 U6 U/ w ![]() ![]() 所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ; % }* S. E3 Z" v 1.1 PA9为通用输出GPIO,未使用USB FS模块4 C9 ~5 S a$ t0 ?- C* N 配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出; ![]() $ [( N6 L3 Y- e, m# d5 h3 G- m! _ 1.2 PA9为输出GPIO,开漏模式,使用USB FS模块 使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现,如果配置:' d, _: Y8 W/ [: u# Y0 \ 如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出; 如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出;" w2 S4 \$ h- ? 客户的问题被发现。* W/ \0 O5 \" V ![]() 1.3 PA9为输出GPIO,推挽模式,使用USB FS模块- V# c6 u. w! t/ x% f) h. N 使用该MCU的USB FS 设备IP,并且配置PA9为输出,push-pull推挽模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:只需要设置NOVBUSSENS setting(bit21)为1,那么PA9 就会被输出为 3V3,而不论OTG_FS_GCCFG(offset_0x038)寄存器的内容是0xXX25XXXX还是 0xXX2DXXXX;2 ]- X) L+ {, ]1 P/ Z 1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块 配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。 # W- a5 l& m8 h1 n 1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块4 m2 F$ Z2 H7 _% N 配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,使用了MCU的USBD FS外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现: 如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为2V;- [3 F2 ~; J- {2 m$ \ 如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9输入为3V3;- ~4 s% Y9 P0 U, l4 N: l0 C 客户的现象也被发现了。. J) N6 ^. E6 a3 ?" C d* [: W 二、解决及总结; T+ W/ V" W' t, [- o- n$ _ 在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。 如果配置成为通用的GPIO,在该芯片参考手册中,我们发现: ![]() ; F* H1 y8 @& t8 U4 [. [ 在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。: I1 ~4 c0 s- |; V2 _3 e7 q 通过具体的上述的操作,可以知道,如果想让USBD模块下的PA9作为GPIO口使用,那么需要满足下面两个条件:% I0 Q5 K- |0 o 1/由于使用到了PA9作为通用的GPIO口,我们需要关闭VBUS sensing(bit 21)功能. 2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。 客户按照上述重新配置后,问题不再出现。 . w$ y+ F' `; _1 k) ] 文档下载1 {. E* S7 k- }/ u ( L5 h: w: s n2 P* \; N. W 更多实战经验( G5 [8 f, F& [8 Z4 n6 H |
谢谢楼主 |
感谢分享 |
![]() ![]() |
参考% k; X B3 s$ m( u![]() |
看一看!!!!!!11![]() |
最全USB HID开发资料,悉心整理一个月,亲自测试
实战经验 | 选择USBX模块生成USB CDC ACM无PD的项目
STM32 USB HID键盘例程
刘氓兔的杂谈【001】-片上USB 高速PHY
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
【源码】STLINK-V3MINI 高速USB仿真器,成功改刷【高速CMSIS-DAP】
在线直播|无需编写任何代码即可在STM32上实现USB-C Power Delivery
STM32 USB CDC 虚拟多串口
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
USB Audio设计与实现