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

【经验分享】STM32 USBD VBUS PA9 as GPIO

[复制链接]
STMCU小助手 发布时间:2022-2-15 19:51
前言
5 r# t$ z, k2 U+ L8 c某客户准备用 STM32F205VCT6 做 USB FS Device 设备时,配置 PA9 作为普通通用的 GPIO 口(外部上拉电阻 10K 到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有 2V。4 U: s; j& E7 A( j
' }$ v* M0 L( ~! s+ O  f
一、现象的复现1 ?2 O: U( g' B5 T1 [! k# l+ I
硬件:Nucleo-F207ZG board,利用 CubeMx 生成代码出现同样的问题:& u; [4 I# S3 y0 a) l- U: j

' e) p* f% C- C- `  H" }3 ^ W1R%W_49W@{AJPRNAG5S$Y4.png " p" `7 y) O" ^: X
7 d/ i' C' `! p
对于硬件,客户的示意图如下:4 m6 P5 z: O) ?! R3 ~% F) A
6 z$ D8 Z& }; ~' Q
@G_3S0E92ME`JO8~4]8NG]N.png / l( a, M) \, `, W1 g3 J
: i. M* n. H3 C# ~: Q! @- K) R, ?
W(]~V)M_HHZFSEDHB0I_(7M.png 3 L2 w6 M* m" q) Z" O4 K$ z

& E. p+ _' ^( N所以参考该 nucleo 的原理图,修改,移除掉 R35 电阻,自己添加一个色环电阻至 3.3V ;( ~) b0 e* r3 ~2 p4 v8 f
, v0 h0 q' e9 D+ ]# ^2 U

6 ^) h1 A- R5 o% p8 g  r" }1.1 PA9 为通用输出 GPIO,未使用 USB FS 模块
% Z% k& [( [" |& f5 Z) X配置 PA9 为通用 GPIO 输出引脚 Open Drain 模式,没有其他的 MCU 外设 IP 被使用,PA9 被 10Kohm 的色环上拉电阻拉到Vdd 电压 3V3,利用示波器测试,PA9 为 3V3 输出;
8 s5 M, l# W# T& _- v) d0 A" d" p% Q5 U5 V9 k- R
$L4RV[T(%SV_}F0GNSR9)PL.png
/ K! p( O$ C: E+ X: `2 _9 R% u9 f- h; n) q3 s8 s' R) Q
1.2 PA9 为输出 GPIO,开漏模式,使用 USB FS 模块

: p- `7 q0 r/ C! p5 D使用该 MCU 的 USB FS 设备 IP,并且配置 PA9 为输出,Open Drain mode 模式,PA9 被 10Kohm 的色环上拉电阻拉到 Vdd电压 3V3。" {2 k' o+ G$ G1 Q1 V7 k
测试发现,如果配置:- n9 N1 R8 l9 b, n& s
如果 OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么 PA9 只有 2V 输出;
6 k% P) l0 J& F. p5 N4 y7 B如果 OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么 PA9 会有 3V3 输出;7 k( a4 z. T: {* m/ b7 R0 t9 Y
客户的问题被发现。
! b7 z5 O" W5 w- d$ q1 C
$ s* N/ S4 |* r5 b0 m1 I( | 2J)Q0[SE098)1K{ZAYDN{55.png + h* p+ E' _1 n; V6 a

1 c$ T1 q  z9 Z8 Y6 h# u7 T1 P9 g1.3 PA9 为输出 GPIO,推挽模式,使用 USB FS 模块- I- e$ e$ K$ \  c+ M( v
使用该 MCU 的 USB FS 设备 IP,并且配置 PA9 为输出,push-pull 推挽模式,PA9 被 10Kohm 的色环上拉电阻拉到 Vdd 电压 3V3。 测试发现:只需要设置 NOVBUSSENS setting(bit21)为 1,那么 PA9 就会被输出为 3V3,而不论OTG_FS_GCCFG(offset_0x038)寄存器的内容是 0xXX25XXXX 还是 0xXX2DXXXX;
0 N* p+ P+ |9 Z& I- o, M, J% t/ X
1.4 PA9 为输入 GPIO,NO PU/PD,未使用 USB FS 模块
" q. \. \; t; K4 E) e) `配置 MCU 的 PA9 为通用的 GPIO 引脚,输入模式,no PU/PD,没有使用 MCU 的其他外设 IP,PA9 被 10Kohm 的色环上拉电阻拉到 Vdd 电压 3V3。 测试发现 PA9 为 3V3 输入。
4 D8 h9 B& X/ d3 x( J
0 @- L7 `+ M5 S! h" x' \* c6 q1. 5 PA9 为输入 GPIO,NO PU/PD,使用 USB FS 模块
" T8 U+ w, g1 q. R* ?   配置 MCU 的 PA9 为通用的 GPIO 引脚,输入模式,no PU/PD,使用了 MCU 的 USBD FS 外设 IP,PA9 被 10Kohm 的色环上拉电阻拉到 Vdd 电压 3V3。 测试发现:' _7 D- x5 ]  L% y& W' K: Y
   如果 OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为 2V;
/ ]  j/ [3 e- O0 r, ]   如果 OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9 输入为 3V3;3 D* E7 ^4 k* `# A  T0 m
   客户的现象也被发现了。
: S. @; [# t2 j4 P1 u$ H
7 X& n7 x$ z: Y
3 {6 J2 u9 F" S3 f2 @% t   二、解决及总结
6 K3 f# w1 W2 W/ ?  _' V, V   在使用 USB 模块的情况下,正常的话 PA9 是作为 OTG_FS_VBUS 功能使用的,但是也可以作为通用的 GPIO 口。
" l" d* ?) T( k   如果配置成为通用的 GPIO,在该芯片参考手册中,我们发现:
" K$ O: w" x. \
1 J1 ^: L2 |2 s4 N$ r" `# B4 _0 m ~SFX$C@~LG405]RZSN%IOWI.png
" K" R  T2 l4 G; e* I  @$ A8 T% f* p* m* \# y$ U
   在以往的印象中,我们一直认为 PA9 用以监测 VBUS 的供电,在取消该监控时(NOVBUSSENS),PA9 可用作普通 I/O 口,
, \1 U8 ?0 z: n/ p5 _0 a   此时,VBUS 默认永远存在。
! ~$ [# Z0 @7 u+ f: ^   通过具体的上述的操作,可以知道,如果想让 USBD 模块下的 PA9 作为 GPIO 口使用,那么需要满足下面两个条件:
  a, P; o$ [$ `3 J" _: N( \   1/由于使用到了 PA9 作为通用的 GPIO 口,我们需要关闭 VBUS sensing(bit 21)功能.
2 {" I% V5 ~: q   2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
4 O1 G. U* }1 K/ [/ j. v8 ^   客户按照上述重新配置后,问题不再出现。* }0 L6 m; u8 J$ A$ k/ I- @8 {8 u8 O0 N) j

* J0 O7 T# J7 F
赞 收藏 评论0 发布时间:2022-2-15 19:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版