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

【经验分享】STM32G4外设之GPIO

[复制链接]
STMCU小助手 发布时间:2022-7-6 14:00
一、GPIO介绍
4 w& u. c: j! K2 p- r6 RGPIO:General Purpose Input Output通用用途输入输出$ e; Q; E: v" d( _7 M

0 z+ s2 n/ f& z+ F核心功能:输入、输出和高级外设的复用功能) Z  w$ ^1 x3 f1 P5 L
8 i* _. K. Q; [+ f
COH($)Q0~L%`6%UJNEMINKA.png 9 {- K) w( }6 W; B1 Y. t: y
% o8 N" N* v; l+ r! m* N
注:使用时一定要配置好各引脚是用作普通I/O(输出0和1)还是用作复用功能
3 I. O- q! k4 G& @" l$ x- Z4 y" u+ g
STM32G431数据手册:查看STM32G4引脚复用功能' a5 N) p3 T& K9 k+ [& Q" D. x
})PW4(YGEVR52A0R)YT%N]D.png
, [( |! W8 A6 T* r; x/ I1 e- ?8 Z; b0 Z$ t: H
查看对应引脚对应的复用功能:( p7 s' F% V9 L+ N' S5 A, O0 \
7 y" B, n  O0 R& P
9 a" M& W/ j; ]  W
4 g. x' M5 `8 [
封装LQFP64 前5行 “ - ” 表示 “ 无 ” ,第1引脚从第6行开始1 n. |; B6 P& x) G# Q3 \5 u$ _
: \( V5 _% f3 H- |
既然有多种复用功能选择,如何指定一种相应的复用功能?
  o0 f% B; k' m8 p( q4 @$ [: J==控制复用功能的选择某个引脚选择第二个功能: ==
! |! Z1 M0 Y9 d( O& y
9 h; T4 H. F" n FFY7}QFZVAXPZNVP7W9]2{H.png
1 H% C( q  e4 I" I+ H& V2 b( z
$ E/ z& [# J4 l+ p  o' S将某一个引脚设置为一种复用功能可根据上图来看,每一行对应着不同的复用功能,将对应引脚设置为AFX对应功能所在列(将PA9设置为串口功能,只要将PA9设置为AF7即可),这里就要用使用到复用功能寄存器
0 |% @6 z' {5 j; ^+ T4 n
& [- ~1 H9 c. E& W2 ?2 F0 gSTM32G4系列控制器参考手册:$ L7 y& x9 k! w7 E5 \& m  O& }3 p2 }

$ }* u: [  F6 {$ v WG69[IU36M$_PVVNNCJPK3D.png
$ v( g5 H: K- {! e7 s1 a2 ]; u8 ?2 M& Z  u" u
[]]L38A65666RW4`TGT$`SO.png # t7 Q3 x) I5 W3 W. X
& ~. N1 N0 b9 l3 Q3 D* \$ T! t# x" p
这个是低位寄存器对应PA0-PA7, 还有一个高位寄存器对应PA8-PA15
" V( A% h5 D4 l/ O7 }, P- X) q
XYAV{6THSI0L4$@@@46C1OF.png
7 A, ?& j9 P& z' L3 s8 s$ m
/ g" w7 `: F/ {& P) _2 }所以,将PAx引脚设置为AFx引脚只需要像AFRL/AFRH寄存器写入相应的值* p. o- t$ i$ b9 F4 n3 e9 S  F

4 r8 \) ~3 {6 B% C6 w# @将PA9设置为串口功能,只需要将GPIO A_AFRH 写入0111( PA9 对应 GPIO A_AFRH 中的 AFSEL9[3:0] )  p4 @7 Z, s8 B7 a* p0 L- U
- N* p* z  q. }$ V4 @
二、GPIO的基本结构
! U) e8 `7 _( A: |& c7 {1.IO口内部电路结构

9 T; e4 D& f- Y7 K8 D* U
! y; B: z3 f: A 3$%GSR6U)4LTCQBP_B0OZNH.png
! u/ m* k- L' H' D; ~! n" I( T0 k( A* B" R
I/O口的基本结构可分为上下两部分,下半部分为输出驱动器 ,上半部分为输入驱动器
; l7 ?: I+ b3 z% }  ^2 k) L- K
6 ^7 U( k  M& d) \2.IO输入输出! W' I- c0 J; e$ Y- v
1.普通IO输出
) q4 f/ _* ?( i1 `1 C
5 u' R! e* x9 g2 O X@$S%B$OORXAQ@NCL9NAOCB.png ( u; H. I; {  [. r6 M  f2 d
/ v' L$ z& g9 j. p( D/ b" X
(1)通过置位/复位寄存器和 输出数据寄存器的共同作用输出0或1  b/ Q  ^4 i) C9 g

, a# }0 h8 k) ]. l$ n(2)在选择器处选择普通I/O输出( 或复用功能输出)6 e7 I, S& \0 m+ i5 c

$ @4 E* p$ Y( z, O$ F(3)通过反相器将前面输出的0或1转换为1或0
0 o6 n# x" ~) @% M: ?3 v4 D7 {3 H( R4 _2 d3 V. i; L! u2 i
(4)通过P-MOS管和N-MOS管两个MOS管决定输出逻辑0还是逻辑1
& g8 ~) w# \$ z. N  X" n' G/ y% M6 m8 v
P-MOS管 为低电平导通,导通后输出逻辑1+ A" b0 Y4 [4 Y. M
N-MOS管 为高电平导通,导通后输出逻辑0
; b% t/ s" J  P: M- p( v& h, [& R( I6 v5 |3 o* o( S
2.复用功能功能输出
' ~; D: e0 m% z* l8 t
% Z* t* C+ v+ Z' A% Y8 N+ a K}{LG8(RUG)$NGB3QTVON(8.png 9 F4 ^7 ~! k+ p" q; Z% M
% d" d$ ]0 j! g/ H9 r+ V
与普通IO输出相比,选择器选择复用功能输出
: t8 D( L! G# d3 @& D( D( g( Q& {3 w* W( K" U$ `+ O$ @# Z( R) y
3.普通IO输入0 C- N5 n6 w% D/ a4 X  g% X; ^
输入为低电平0时,上下拉电阻处于关闭状态,施密特触发器为打开状态/ i" ?8 p7 C( T1 d
3 ?: E1 f6 M* V2 [- X
@$Q@N{~OP~Q1F@EM{(NGXVM.png
' C) C+ N7 l" B3 U+ }  ~; g1 M
' j1 C5 p  l3 e但是,若输入为高电平时要考虑输入电压的大小,如果电压过大必须进行稳压,否则会烧坏电路,这就是包含二极管的作用& d2 [7 ]7 Y  ]& {8 }

: {8 L: O% r" P: ?4 w  z* l7 R(1)输入的高电平为3.3V:能够直接通过I/O引脚进入内部电路
0 S5 r: F% A, A+ b( X" r/ s( }
(2)输入的高电平为5V: 要用到 5V容错I/O端口 其中 VDD_FT(3.3V)  m! Z& q; J% b% Z
当输入为+5V​时,上面的二极管导通,连接 VDD_FT(3.3V),将输入的5V​稳压到3.3V​,从而保护了电路
  H+ O, x0 U) T0 `+ Z
9 l0 `4 u! A, v* q! M8 e P@ZRXCS4)B4@ZM`7WJORM02.png
& ~% _4 s7 P& ?( x0 ^! l3 j+ ^
2 @& M7 g3 p0 B$ u' q- _2 Y3 F- v2 u(3)当输入为-5V​时(和5V方向相反),下面二极管导通,连接VSS(0V),将输入的-5V​稳压到0V​,从而保护电路% Z% Y3 T+ Q. t- I7 ]7 Y

( n3 q. R6 @$ M6 Q0 r% Q, h )97MCXMPI9VFCKEZHAKI9(G.png 4 X+ m" Y4 g' F, N6 H% t/ b0 l
" t) A) q, e! I, u% e, F2 L* f
上下拉电阻
( E/ r& J* k9 ]  |0 x; y当某个引脚处于悬空时,其输入电平不能确定,既不是高电平也不是低电平2 G3 O# D6 H6 _) A
; K5 C# X( v: G1 V
上拉下拉电阻用于处理IO口不确定的电平状态,强制性的将电平拉上或拉下* E$ T. b  s, g) z5 Y* s

4 z7 z" N& b3 v1 `0 O注:当输入为确定的高电平或低电平时,上拉下拉电阻将不起作用
+ g! c. B4 r7 a4 |7 y+ C* U8 r- a' u& u& `+ G% h5 I. k
上拉和下拉都各有一个开关,当输入电平不确定时且上拉或下拉开关闭合时,不确定的电平就被强制性的转换为高电平(上拉开关闭合)或低电平(下拉开关闭合)
) o: G1 Z/ u; g8 h3 w) o: @4 A8 O2 @. i  f( j* j( y
上拉电阻:将上拉开关闭合,输入的不确定电平被强制上拉为高电平% X. T9 n# Y" ~4 [

% Y/ }" K4 e0 ^3 ?
% n4 `1 t" D' n1 u' N
( T5 B" H. q# v; M+ ^0 [* A5 O下拉电阻:将下拉开关闭合,输入的不确定电平被强制下拉为低电平/ C0 X1 d' x5 y! J$ b" Z
, ]; L$ _* I: S' \
YOQUVW0S]8MH49B{)$CZ``B.png
  s- }0 v( d& k  S3 Y' U+ Y
0 W: i$ m) Y! ^9 {% r/ }7 v# m小结:$ ?4 l* n1 _7 y9 J" c

9 c% z" Q2 m) e  H; M! B' j 2$$OR)67$L1ZFHEVQHO_UJO.png
% g4 d& l' y. I7 A( m6 R5 V% A1 ?* a9 _4 q8 ^+ C
三、GPIO工作模式, o. N: n, h2 O6 Y) i4 M1 c
为实现不同的工作要求,GPIO有8种工作模式。每个I/O口可以自由编程,但I/O寄存器必须按32位字被访问。3 \5 \6 M% C8 q5 b. E

& m4 |# `+ m6 y; Y0 R1 D 8%~B~J2{6Y98XLX~Q3[B`{E.png / f% L$ g, [, A& I3 v1 F7 g1 y
" o, H) [% X, J; A+ g
1.浮空输入4 u, c9 R1 I: B' x
浮空输入:复位上电的时,引脚不确定电平的高低(既不接电源,也不接地! p9 g% L$ [+ ^4 `# ~- a( {
- {: H" q5 Z+ `

. F* L1 S# l" Y, I* [2 `# H9 W7 T+ G, h; ?
(1)外部通过IO口输入电平(上下拉电阻处于关闭状态)
3 W/ U. v% G$ I5 V  V- U: T% V' @% C; H- F
(2)传输到施密特触发器(此时施密特触发器为打开状态)7 v; C2 [( g, E3 U" l
! c) @2 F! ]% B8 J
(3)继续传输到输入数据寄存器IDR
, e- j/ g  v- y: ~! V
) J" J' l- e7 u(4)CPU通过读输入数据寄存器IDR实现读取外部输入电平值
# j6 Y4 F" a0 K1 {/ h. {8 k
( k  ]% r7 b: X2.输入上拉模式" Z% H9 W1 x; X. a
输入上拉模式:与输入浮空模式相比较,不同之处在于内部有一个上拉电阻连接到 VDD(输入上拉模式下,上拉电阻开关接通,阻值约 30-50K)
# Z/ r  k4 U$ v0 j" @3 y, B
) K4 d# s6 K+ D# n% J HZ)I56NI_[O9XG(9JKVW20G.png
" O; Q8 r- I. g+ v1 @0 W, s* a% }" S% O$ M% ~
外部输入通过上拉电阻,施密特触发器存入输入数据寄存器 IDR,被 CPU 读取,当输入管脚悬空时不受外部噪声信号干扰。1 `0 P/ j6 e* U$ K
3 Y% I( t& f+ F2 [" l4 I2 l
无论输入管脚悬空或者被高电平驱动时,读取的都是1. 只有在输入端为0的时,读取到的值才是0。因此采取的是非0输入模式。即若读取非0,即为1,若读取为0,即为0。强制上拉,一般是为了输入强高电平9 ]1 p/ _2 l( U7 ~

1 V9 ?  D& ^# p7 P3.输入下拉模式# h0 ~+ z7 B8 W( P
输入下拉模式: 与输入浮空模式相比较,不同之处在于内部有一个下拉电阻连接到 VSS(输入下拉模式下,下拉电阻开关接通,阻值约 30-50K)
0 z$ H1 i& [' s' q& v" X" v$ y
3 }* S% Q! _! ~ _M(P9B}M9E%HZM2C@Z]$AII.png # D/ @: f- u  d$ ^4 s# w' G5 y7 D) F
/ @# O3 O) w1 |. q+ H
外部输入通过下拉电阻,施密特触发器存入输入数据寄存器 IDR,被 CPU 读取,强制下拉,一般是为了输入强低电平( Q* ?+ P1 @2 Z" [2 o+ ?  `& h

0 z5 L0 y: `0 E" Q( v3 Y4.模拟输入模式* t, K  B  p# m7 x- z5 q) Z

" r7 `2 o5 X" |, M4 {5 I P}YCDKRYGE2PANM~(V[0EDR.png ! \7 X7 s& c* q3 ]
上拉和下拉部分均为关闭状态,施密特触发器为截止状态,通过模拟输入通道输入到 CPU,IO 口外部电压为模拟量(电压形式非电平形式), 作为模拟输入范围一般为 0~3.3V
$ l# |6 X8 k+ Z, ]. D
6 k* n3 M& H2 t* F' o; |" d将IO口作为模拟输入接口,输入的可能是变化的值,接收外部的模拟信号输入' t  ]6 o2 S- o5 s6 V5 G- w

$ g( I/ g2 Z( q4 L/ {# S5.开漏输出模式
' w5 ]/ a# D/ E( U! C: b  ]开漏输出即三极管的集电极或者MOS管的漏极进行输出
# r' \5 m9 e0 q: @5 t' i: @7 A: `: Q
/ H0 g) J7 v/ L: m- @; Q4 F3 k开漏输出可以实现线与功能。开漏输出只能输出强低电平,高电平需要依靠外部上拉电子拉高,适合做电流型驱动,吸收电流能力较强0 h" P1 _! Q3 U0 n0 ?- R2 r
, O; q$ L1 ^* l$ t0 s; }0 O( \
注: 在输出模式下TTL施密特触发器为开启状态,所以输出模式下仍存在输入
4 U3 T+ z  O$ o: Z% y$ J% ?3 b2 m% {- t1 w  n' C( ?" \+ S
1TR45RR1)%@~ORX`09ASU4R.png 1 t& [( a6 ?( V& Q8 J) _1 t) V+ @
. I) B0 H& c9 F# y8 V3 R- A
(1)CPU写入位设置/清除寄存器BSRR,映射到输出数据寄存器ODR
+ Q8 j# l+ j  R1 J" ?" k, }, p2 F  |( {
(2)联通到输出控制电路(也就是ODR的电平)
+ R5 j- O+ z7 D9 @$ B& l# o! D7 f  c# S  h+ B
(3)ODR电平通过输出控制电路进入N-MOS管
3 a- V. H: Z% l8 v# m5 n3 E
4 m5 z  D) z4 t1 K2 G开漏不使用 P-MOS(输出1) ,故输出不为 “0” 或 “1”,而是 “0” 或 “浮空”! k7 j' D# F0 ]. {8 z% M$ Y3 H2 L  c
. Q0 G, I/ c: E) J- u  y5 Z+ j) w
(1)写0传输到MOS管处,N-MOS 导通,输出为05 h( M2 Q- Q6 q
(2)写1传输到MOS管处,P-MOS 和 N-MOS 都不导通,输出浮空
* a' @/ B/ Y4 X& ~/ ^# \2 Z  X( T' x/ T+ A8 I5 t' S& d* g
(1)ODR输出0:. V3 C5 R" T9 T* x
N-MOS截止,IO端口电平不会由ODR输出决定,而由外部上拉/下拉决定
; o( d9 j$ s. ]1 T+ J/ h/ P$ t: |9 P3 ?1 d
在输出状态下,输出的电平可以被读取,数据存入输入数据寄存器,由CPU读取,实现CPU读取输出电平
1 u. d/ T' g; }- d- C- J& p# B7 E( t  J
所以,当N-MOS截止时,如果读取到输出电平为1,不一定是我们输出的1,有可能是外部上拉产生的1% b# d, h, ]( C2 V( r
) w+ a2 O6 O" X  J# M+ s3 Z# k( ]" v; I' z# l
(2)ODR输出1:
# C- `% S* F0 L4 t8 w) p2 EN-MOS开启,IO端口电平被N-MOS管拉倒VSS,使IO输出低电平。此时输出的低电平同样可以被CPU读取到1 `  d5 G& ^  ^6 G, A
8 S3 B$ B$ p' D! }
开漏输出为不确定状态,不具有驱动能力7 v; U1 J6 z. f$ A0 g7 Y$ [2 I5 S3 q

5 D1 v+ T5 J( ?& x% K% n6.推挽输出模式
& k- D, n  v4 ?3 K- N
推挽输出使用 P-MOS和N-MOS ,输出为0或1. e  J' v  |! d- D% F# L; [& v5 I

! x) d) w$ y8 @5 W YC9V7@3~P~A)B}%9R3(AB}N.png 8 Z1 u. w3 d' j; l4 v
4 |6 x6 v6 v( A# z$ K$ n3 I
推挽输出可以采取强高/强低输出,可以连接数字电路
& U0 e1 d" s0 t2 [% B
& ]' W. k! f, V" Q" L7.推挽复用输出模式
+ \- \- r' F! Z2 H8 T9 _7 W, `+ n5 b5 u3 q. ~, p$ V
LELCOLXI2`S)TGG_FGM1902.png ( q# T4 r2 e: G
与推挽输出模式唯一的区别在于输出控制电路之前电平的来源
6 I9 F7 m$ d6 r. Y- a推挽输出模式的输出电平是由CPU写入输出数据寄存器控制的,推挽复用输出模式的输出电平是由复用功能外设输出决定的
5 A9 a1 c7 a' I: m! x7 ]: Z7 }/ h9 l+ U3 n
8.开漏复用输出模式

. d4 q7 |4 R& M( ?; U8 a* U  l- u6 N8 N8 h
V236_PO}@JP$B[WVSSQ5EVM.png
1 q, w" z" Y& g) D. o# H) `与开漏输出模式唯一的区别在于输出控制电路之前电平的来源' D) w1 W. k' v: R, Q
开漏输出模式的输出电平是由CPU写入输出数据寄存器控制的,开漏复用输出模式的输出电平是由复用功能外设输出决定的; {: k' D1 m' d5 ~" o7 c# m0 H

  S* C9 @0 O7 Z7 K6 i$ w3 X小结:* i+ u: C7 Y5 z9 S. a- M9 H
(1)推挽结构:两个参数相同的三极管或MOS管分别受两互补信号的控制,总是在一个三极管或MOS管导通的时候另一个截止。高低电平由输出电平决定
0 z) v, ?' K6 V1 \  ?, C% B7 z* x
! ~" h- U; ~4 W4 L8 S1 ^7 Z  S(2)开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。适合于做电流型的驱动,其吸收电流的能力相对强, 由于输出电平完全由上拉电阻连接的电源电平决定,很方便的调节电平转换
6 }1 V+ P6 ~- ]& Z( ]1 X" ], D, G- k/ w5 o- N
可以实现"线与"功能,"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平# o$ t; S/ j2 G9 x9 N

6 }" X. K. |- @) ~(3)推挽输出:可以输出强高、低电平,都具有驱动能力,可以连接数字器件
" D# r1 N& G& C2 L3 {5 P1 |5 n5 |' m9 b6 W2 V9 m, P( x% J; [
四、GPIO寄存器组

; G) |/ L3 n) a5 DSTM32G4系列控制器参考手册 : 查看GPIO寄存器* I. B: F# i) ?* g3 }# s7 [
& B' a3 m; F+ T, @4 M; s, ~# O
S]}D5NI2GRL$A@~UO}0FC%S.png / h7 D5 t+ w& N% _6 r" `- ]3 V
: d$ c$ P- \6 a: S1 t' T
每个GPIO包括10个寄存器来配置GPIO的具体功能(每个引脚功能都是完全可以独立配置,互不影响):
& I4 g& p) f: h  ?! S  [& }- Y9 H' X2 F& M4 k
GPIOx_MODER:GPIO 端口模式寄存器7 X( W. N* h; {# l# ]4 K
GPIOx_OTYPER :GPIO 端口输出类型寄存器1 P$ r9 p0 O6 k) z9 u& O/ e
GPIOx_OSPEEDR :GPIO 端口输出速度寄存器: {! d$ K; u" f0 k3 A3 {
GPIOx_PUPDR :GPIO 端口上拉/下拉寄存器
* z7 C6 c$ B* o, w( ?# ?- cGPIOx_IDR :GPIO 端口输入数据
& _$ O5 s4 i% T3 w" Q0 NGPIOx_ODR :GPIO 端口输出数据寄存器% g8 ^7 J; y) o4 o
GPIOx_BSRR :GPIO 端口置位/复位寄存器* t) e: F. E$ u5 R  A
GPIOx_LCKR :GPIO 端口配置锁定寄存器% e* }6 k4 k* B( r/ B! C
GPIOx_AFRL :GPIO 复用功能低位寄存器* X+ w$ L9 P% F
GPIOx_AFRH :GPIO 复用功能高位寄存器4 B2 }7 l3 G2 X  t: U
GPIOx_BRR:GPIO位复位寄存器0 K6 y5 U; x0 }8 y4 N8 j+ g

7 G* G: [% L9 y' Y( x )N$%}HJMVIYZNOC~M]C~V.png 8 I3 N2 L6 s# }8 X( [6 i- Z3 I4 I

; \4 C) O* `/ o+ m8 c, B4 S* k" m2 r- r. o4 [
1 j5 ?# C$ M. Q/ n
+ D8 K1 }5 r8 Y, e% `

% q# T% k, I- u; B8 }3 t
赞 收藏 1 评论0 发布时间:2022-7-6 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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