STM32 USBD VBUS PA9 as GPIO 7 n& x" S# @* W$ m前言 某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。7 c; H6 V/ Y" _0 G# k 一、现象的复现. [" I+ B6 Z+ u/ y2 M- G# e% z 硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:6 `2 K# Q5 h$ }9 S 对于硬件,客户的示意图如下: 所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ;' B1 J1 z3 F" w, g, ?5 @9 \ 4 Q( ?$ _: x3 k/ L. \: y- h! S 1.1 PA9为通用输出GPIO,未使用USB FS模块 配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出;$ v* y0 E3 W8 E 1.2 PA9为输出GPIO,开漏模式,使用USB FS模块( p8 n9 V6 G w" l 使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。8 x" ?+ [/ ~- E1 t3 C 测试发现,如果配置:, m7 u) @, W2 b0 i 如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出;; p& D \8 E8 l 如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出; 客户的问题被发现。 1.3 PA9为输出GPIO,推挽模式,使用USB FS模块, ~' K% D4 Z+ k1 \4 d 使用该MCU的USB FS 设备IP,并且配置PA9为输出,push-pull推挽模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:只需要设置NOVBUSSENS setting(bit21)为1,那么PA9 就会被输出为 3V3,而不论OTG_FS_GCCFG(offset_0x038)寄存器的内容是0xXX25XXXX还是 0xXX2DXXXX;$ g" t9 m c& l2 _ 1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块/ J9 B% q7 F6 j$ P* x+ y 配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。6 c/ G) `& C* g: @( B$ O- m; f 1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块 配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,使用了MCU的USBD FS外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:1 N: Z# L4 t9 v% _" \ 如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为2V;4 b3 k# T- h: L1 J 如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9输入为3V3; 客户的现象也被发现了。 O9 l& c/ v4 n: v # ?, h0 T6 W% { 二、解决及总结+ ]; {% q! t1 J+ C; m! r0 W1 X 在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。 如果配置成为通用的GPIO,在该芯片参考手册中,我们发现: 1 ?/ P; w8 U+ `2 S3 i6 Q$ `% z 在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。 通过具体的上述的操作,可以知道,如果想让USBD模块下的PA9作为GPIO口使用,那么需要满足下面两个条件:! b7 s. M: D1 k3 c- C3 B# j 1/由于使用到了PA9作为通用的GPIO口,我们需要关闭VBUS sensing(bit 21)功能.5 N: J" h; l0 H 2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。$ y, @) }! T" G0 ]( D 客户按照上述重新配置后,问题不再出现。 ; t1 x+ @& m Y1 i6 m4 [6 g 文档下载+ n6 X/ c0 Q$ d+ m# X 更多实战经验0 G) Z' b2 \% I; T+ Z2 n. n |
谢谢楼主 |
感谢分享 |
多谢分享。 |
参考 |
看一看!!!!!!11 |
最全USB HID开发资料,悉心整理一个月,亲自测试
USB Audio设计与实现
【MCU实战经验】+STM32F107的USB使用
圈圈发布USB图书第二版有感,以及分享一些我学习USB过程...
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32 USB-HID通信移植步骤STM32 USB HID键盘例程
【经验分享】在进行 USB CDC 类开发时,无法发送 64整数倍的数据
如何让CDC类USB设备批量接收64字节以上数据
用STM32F4实现的USB摄像头UVC,配合上位机可识别车牌
STM32 USB CDC 虚拟多串口