你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】STM32 USBD VBUS GPIO

[复制链接]
zero99 发布时间:2017-6-29 17:02
STM32 USBD VBUS PA9 as GPIO

& y' g' j# @0 J! W8 V7 Q前言# 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
一、现象的复现
' Y/ T! W1 R! j. [" J/ I- ^硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:- N0 q! ]) X; c0 i7 ?2 C
21.png 2 i! a; d4 O' \4 U* h; s4 ]- u
对于硬件,客户的示意图如下:* N9 Q, t, Y5 P4 U6 U/ w
22.png 8 i6 d6 j8 U2 p0 ^! Q
23.png 8 @/ F% J" O; G5 V0 j
所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ;
" `0 t. _- k0 a/ L% }* 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输出;
  l" K  E8 w! o" U  W
24.png $ |8 g" Z2 i. L/ [& m& Y: S- B: ?" ^
$ [( N6 L3 Y- e, m# d5 h3 G- m! _
1.2 PA9为输出GPIO,开漏模式,使用USB FS模块
, M) z+ g9 n/ U( k: N0 i使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。
; g5 B8 H$ w" r' r7 I0 z, ?测试发现,如果配置:' d, _: Y8 W/ [: u# Y0 \
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出;
! o1 ^+ A; m+ E9 S& i6 _如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出;" w2 S4 \$ h- ?
客户的问题被发现。* W/ \0 O5 \" V
25.png : p4 M. w6 \/ d5 C1 f% G

( C6 d8 R6 `5 K1 y0 \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

# `% j! w0 \9 d- e1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块
9 v- \) b, y1 U9 `; n6 \" l配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。
# E) l2 e, y5 ]1 V" s( F( O1 S# 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。 测试发现:
! f9 g3 B2 ^8 y0 [& i: p如果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

3 d6 _1 ~; }& \! B3 z* K二、解决及总结; T+ W/ V" W' t, [- o- n$ _
在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。
1 @1 P8 W" O% a9 b如果配置成为通用的GPIO,在该芯片参考手册中,我们发现:
; o1 W0 B2 ?: K, w& Q
26.png
/ X# h+ m9 w) J6 ?+ R; 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 B+ Q$ `% b/ Z* B+ H# y2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
6 }; n  k, j7 X& k5 H" O* O客户按照上述重新配置后,问题不再出现。
+ _: }0 }0 E8 [3 N9 s6 J. w$ y+ F' `; _1 k) ]

% P8 a& w2 M9 w5 o8 ~
! U+ R: _3 K8 u% c: B文档下载1 {. E* S7 k- }/ u
( L5 h: w: s  n2 P* \; N. W
更多实战经验( G5 [8 f, F& [8 Z4 n6 H
收藏 评论5 发布时间:2017-6-29 17:02

举报

5个回答
ruigewei5 回答时间:2017-6-29 17:09:52
谢谢楼主
arenas 回答时间:2017-6-29 18:14:12
感谢分享
Paderboy 回答时间:2017-6-29 21:16:51
多谢分享。
weigr 回答时间:2017-6-29 22:19:18
参考% k; X  B3 s$ m( u
MrJiu 回答时间:2017-6-30 10:12:46
看一看!!!!!!11

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版