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

【实战经验】STM32 USBD VBUS GPIO

[复制链接]
zero99 发布时间:2017-6-29 17:02
STM32 USBD VBUS PA9 as GPIO
4 D/ Y& I! e* C. ?; d1 \6 `
前言
. d$ \% G; }* D7 `$ Y9 k' U6 \" G某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。
2 {6 i% u# Y- P
( R4 a% F$ K9 V" q. O4 ^一、现象的复现7 l$ R& t1 y/ e9 Z8 ?( H9 n
硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:3 A) t) @0 q0 W* Y2 X
21.png
' f  Q4 V/ G$ A0 `& Y9 _对于硬件,客户的示意图如下:
  t# O6 a; h; D" Q1 V# B
22.png % ^1 T& U9 H6 B+ g6 p1 s$ F9 @
23.png ) M0 z9 Y  s$ h6 _* p
所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ;
- ?" D: V' L7 _& ^2 n6 q# \4 K% _! K8 ~+ |* m+ _
1.1 PA9为通用输出GPIO,未使用USB FS模块
+ U6 x9 t4 m: m9 e$ }4 ]( j配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出;
3 ?$ ]  ?2 d- u( ~
24.png
) {9 q. s5 H" g$ v* G8 h3 g: C4 O' ^" N# h/ }
1.2 PA9为输出GPIO,开漏模式,使用USB FS模块
: I% R* _  D; H9 y# A使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。, y! B+ W, ~. m, K6 T  Y- ]
测试发现,如果配置:8 f! o/ V  N* ~. ]  Q
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出;
& }3 H) \2 ]$ S4 P如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出;* w/ ^8 X9 \6 F" Z4 z
客户的问题被发现。/ |+ e8 i" v  i1 n' W
25.png
( Q, v, H5 l2 W' Y1 Z1 M; K9 E) Z4 ~" S$ r
1.3 PA9为输出GPIO,推挽模式,使用USB FS模块8 w- L" S* _; {! v4 U: H
使用该MCU的USB FS 设备IP,并且配置PA9为输出,push-pull推挽模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:只需要设置NOVBUSSENS setting(bit21)为1,那么PA9 就会被输出为 3V3,而不论OTG_FS_GCCFG(offset_0x038)寄存器的内容是0xXX25XXXX还是 0xXX2DXXXX;
* j1 T$ Q" J- M1 ^) w
4 U/ Z$ K, k) t. D% F: |1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块
9 C+ ~, m  ?7 J' m: S* h) d. O配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。
0 l6 [; B9 Z8 v" o) {9 m8 n- y$ T$ c$ u5 l- m+ ~4 z
1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块" p3 A. v& n9 E2 N# k9 a" w( m
配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,使用了MCU的USBD FS外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:( x" W- z9 [" K" N* x
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为2V;# w* Q$ j, @* q( U0 P- b- o
如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9输入为3V3;( p! B0 G0 f3 G4 H* e
客户的现象也被发现了。
  X* L/ D7 W& b% `* I2 @
3 L# z" y# ^: G9 N( Q  B二、解决及总结7 b& q, J2 k9 Q8 W, q1 M- U+ T. _
在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。
6 L: J% p4 V( r如果配置成为通用的GPIO,在该芯片参考手册中,我们发现:: P8 K  v0 `) ]& T5 G1 ]
26.png 1 Z, B6 g3 B% n2 d
" u( p9 y: v* b0 O7 ?! ~
在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。( D1 E, o0 E( E7 \
通过具体的上述的操作,可以知道,如果想让USBD模块下的PA9作为GPIO口使用,那么需要满足下面两个条件:( C( f- ?# N' g0 D' X
1/由于使用到了PA9作为通用的GPIO口,我们需要关闭VBUS sensing(bit 21)功能.6 x- l; |7 B& A3 C
2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
$ y+ G: a+ M1 X' E8 F  K客户按照上述重新配置后,问题不再出现。
6 ~1 D) M4 u. G' P6 d- V0 m4 t
1 H, l: P; n6 t& o+ h7 u
: r* S  l. x% U
5 f" R, ?' E* o8 P& u" @. k0 u文档下载. N' n/ T- D9 V# k( a
5 T& J/ W& R' f9 r& E/ h
更多实战经验% e* K0 A8 j* J6 `$ g1 Q' Z  I
收藏 评论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
参考
/ x! O3 w/ X  d8 W$ {: w
MrJiu 回答时间:2017-6-30 10:12:46
看一看!!!!!!11
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版