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

【实战经验】STM32 USBD VBUS GPIO

[复制链接]
zero99 发布时间:2017-6-29 17:02
STM32 USBD VBUS PA9 as GPIO
7 n& x" S# @* W$ m
前言
5 R# e# u( E) c" p) q, \! E/ g3 J某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。7 c; H6 V/ Y" _0 G# k

) O* J0 J# q2 @) C: `一、现象的复现. [" I+ B6 Z+ u/ y2 M- G# e% z
硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:6 `2 K# Q5 h$ }9 S
21.png
4 y3 |) P/ m$ x# Z) @5 g, M对于硬件,客户的示意图如下:
; d' q3 o4 e" C5 D! `
22.png
5 e& `" O1 [# y$ ?% b8 O" c
23.png
2 J' x2 c# O7 V1 _. i) ~% C$ b所以参考该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模块
0 A% a0 w2 g* m( k0 ]配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出;$ v* y0 E3 W8 E
24.png , o$ L6 C( U' t4 M( W1 R

' M) d& @+ c2 y9 \8 O1.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 输出;
3 Q2 A! k) N* Z1 E! h5 K6 q客户的问题被发现。
  M$ |' y* K3 c7 W
25.png   Z; m2 A( W0 C0 {* S

) P* z& }% l1 ?+ X9 E- J4 [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 _

5 n; T) f; Z7 r5 F; z1.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

' V- j  q0 s# Z# ?+ G% z1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块
' V$ D" {3 M6 c: u6 I配置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;
% ~! @9 {2 `' _* {: i' A: h. \客户的现象也被发现了。  O9 l& c/ v4 n: v
# ?, h0 T6 W% {
二、解决及总结+ ]; {% q! t1 J+ C; m! r0 W1 X
在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。
, W1 |& R* [8 b' F7 K3 M# {2 }7 ?2 f如果配置成为通用的GPIO,在该芯片参考手册中,我们发现:
  M/ x! _9 f9 b6 C  u( B) v3 ^
26.png ) C. }6 J) G; Y- w
1 ?/ P; w8 U+ `2 S3 i6 Q$ `% z
在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。
; x3 q3 Z+ j/ [# h% d& d通过具体的上述的操作,可以知道,如果想让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
客户按照上述重新配置后,问题不再出现。
3 i( O' ]$ V! g8 r9 L3 g
( u+ ?1 R" H% T; t1 x+ @& m  Y1 i6 m4 [6 g

: Q8 M/ O9 h& l文档下载+ n6 X/ c0 Q$ d+ m# X

3 L% f9 B! B* G& O4 @7 _更多实战经验0 G) Z' b2 \% I; T+ Z2 n. n
收藏 评论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
参考
$ S$ |2 l! x$ B" O, R' f7 v- V: P
MrJiu 回答时间:2017-6-30 10:12:46
看一看!!!!!!11
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版