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

STM32 GPIO详解

[复制链接]
STMCU-管管 发布时间:2020-12-7 13:19
STM32 GPIO详解

! c% I0 T/ ^) @
  A1 y6 V) a- ^: j
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。
- B. ?2 U# F* |% ?4 w! i2 N& \$ }, i: }
) z7 y$ O- `1 s, O0 H/ ]
01、I/O接口电路7 `* k, a+ {1 _9 g1 b
带FT的是说明可以容忍5V电压的,I/O电路框图
5 a' S2 D8 d  U# `; j( ^! P' p
11.png
1.1、普通输入
( {  B# b$ ~* w) m3 ?2 A( J普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式
% h: L" T) k5 @) H9 w/ O& u7 Q, J  u) l
2 ^# s$ U* A* W$ X! z) O6 Q3 W7 ^
1、浮空输入,不使能上拉电阻,不使能下拉电阻) w) u4 e+ e0 S% t! `
2、上拉输入,使能上拉电阻
7 ]: F. b- k) m+ y' G' X% j3、下拉输入,使能下拉电阻4 l, m6 E3 V& m. |& O0 a" |
12.png
从上面框图得知,输出缓存是被禁止的0 i1 A  C2 E7 ~" z4 `2 q
. x8 u$ ^+ }- M) w* N! E
8 \% e1 P+ B* D  J! \3 x
1.2、普通输出# F4 `% g- k* X- i2 l
普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式' |% s" r1 B; O" y# K
4 z; x8 K, U) z! F0 P4 q

# h& l5 f& R5 y* X: @开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)$ n, @8 U! ?7 B! h5 D( k; ?: y+ ~
推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS
+ t9 u/ {$ o7 M' i2 M
13.png
从上面的框图得知,  Z/ ^" Z: k& T

! {  \! k# z/ W# V
2 e6 l8 F$ y7 _$ E, Q
1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。
' b9 B5 H- h* `2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段8 K$ L& T  m9 p/ [* Y) N! X" K6 C

) [9 d! p6 s3 w" j2 C# l1 O1 O0 ?2 J

; B) r' A& m) X1 a- @1.3、模拟输入3 ~3 A' O  ]- h4 h. v- {. ]. z
模拟输入上拉电阻和下拉电阻是没有用的
9 V  a. D& P' \$ P7 i+ x, x  H& l0 o, j) k- M! y

& k) p; W1 f% i: z% m高阻态下模拟输入
1 z$ l. |* j! j, Z, d- ?
14.png
从上面框图得知
* t5 D7 Y1 l4 e- y# V3 |. V1 n! {  s4 X9 m/ i9 C

- s: G4 o5 m) z7 O2 a弱上拉和下拉电阻禁止( @8 d0 N) R' x0 ~9 r
( A% B$ B  W+ i) w

2 c$ a! u8 U% Q( ?3 J施密特触发器停用,施密特触发器输出值强制为0' P) x/ d0 D) Q, g; {+ ^
! m/ K& X" H7 K' Y6 _

- @# c4 x5 F8 C输出缓存被禁止
+ m( F) X9 x5 K2 b, w% F
9 `. Z* ~  A0 }2 x/ A
9 ~6 ~6 L0 Q( z
读输入数据期存器, 读到的值为0
1 x$ }7 B) t1 x: X  k2 w  Q
" S5 r3 ?" A; X6 w

% _, @" e% z! @5 o1 l( O% |注意:IO配置成模拟输入时,不能容忍5V电压
8 G4 b, N, ], U5 L2 Y5 _# W2 B/ _# b/ v
8 B- @) ]  c$ h; G& w

" t) {6 _1 N3 e" f5 F1.4、复用输出
3 _7 V& E2 w. E  {) E+ g6 [$ C  F复用输出框图
3 F' d. A0 P! H: M3 V6 N3 H
15.png
从上图框图中可以得到5条信息
6 G7 E% N% H8 i$ r  E0 t/ `
$ o" f4 w  Q8 @
7 m0 `. O1 g& f+ @2 t, `% s9 Q
输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的
# W$ _8 F# O; L3 X: j
9 s& P- v9 D# a3 M) C9 ?" {4 l

0 X% a+ I* N5 F/ x由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出$ C# p$ S4 d% ?% }( y
! a3 Y# a4 l" }- H5 b. V
* A1 g) B" y; _- Y* e# o1 M6 A# u3 b5 r2 X
上拉电阻和下拉电阻使能,可以进行配置
$ O; J0 R9 c5 w% D
& `& P7 f0 e! t! i1 A/ ~2 c
% K  p  p3 j& A' s  e
TTL施密特触发器使能" s  |) ?9 h: j" P: A
/ a+ x+ S- m0 m' M* l' X4 a

. _' [7 W) k5 @3 x9 D可以通过读输入数据寄存器, 可以得到 I/O 的状态
9 L/ R  _" h$ Z3 }
+ l/ v1 r0 K0 D# w6 l1 p, _$ z02、管脚复用和重映射
9 D) k, H2 Y  w管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能& [- f3 s# d0 X. c$ V0 y
4 L$ y7 H1 s1 A
! r% D  R! M+ ^
2.1、STMF10X系列
* l. D) K9 d. x9 j$ KSTM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。
" b+ a: x0 _( k4 m3 N
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。! j4 b& }3 o  @! ?  U7 M1 @# k
2 a* @# e* k) `% f1 w8 I- j
% b" W* x& E& J7 D
STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:, k5 b  `# M( A# U3 J9 y
17.png
重映射步骤为:- V& ?! b( }* Z* x) u# q7 Q, D+ ~
" u, m1 L3 P4 K2 @

0 o) c7 O$ K4 c2 G% d$ k1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
* ~- s  D8 I) m- u+ ]! t$ c
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启.
) A) i% I/ i( K7 H! m1 A4 w' ]- N, `8 Y" p* |3 V
. O3 b8 r# d% D7 N1 r8 V
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
% \8 `- P; M! U: T; f1 Y; i" ]3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​1 `# }0 S/ e5 f7 t
  1. * W, e+ R) g/ j: s
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;/ q! F, |" i7 W; @
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;) v4 f+ T- T8 P- {% m
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
    ) O" H; s3 T- d6 G2 m
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);, p" N' ~4 ~3 G
  6. 2 B2 R* K- h& B  W$ B
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;: y9 W$ |3 ]3 Q5 m7 }' I9 n2 `
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
    ' i3 K" P3 z$ C2 }5 z" j
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列
/ G" ~) s" C7 x8 a2 s- x" }6 b* NSTMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。
: B2 v  S1 ~6 _: \# u& v9 y
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:2 `6 c& A6 O- f' ]0 {
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。
+ v' Y* ~- Y0 t, M* }' x7 B. V& P7 `3 p" U5 q" G8 I# E
3 d- t8 ^8 v' ?' D+ {* h: z4 f
备注:要先配置GPIO为复用功能,再调用复用的库函数
! J8 k. A& n7 G$ i5 r
20.png
03、相关名词解释
, J; W, E' u/ dGPIO模式名字解释
+ [7 k0 b& y) \4 {
21.png
F20系列:GPIO共有四种功能​​​​​​​
7 u9 q7 O: [! X" H- Y6 a
  1. typedef enum: x& p# W& o7 G% r
  2. {
    ) ]5 _6 p& e  ~7 }
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
    + e- D+ Q: `1 d3 k( f0 N" P! {8 p
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */$ |. ^# P2 ?! c0 _3 l$ p: @
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
    + F& |( b# x: L' S. \5 ^1 u
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
    * c% S" D; q5 \- T, z/ P
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态# }/ p  V' V, v! ?/ U
5 |2 u* Y0 S$ ~) J
. l; k( x& E( i: _: s) Y
推挽输出
) j5 D+ A( J$ a4 K. T. p
, `5 ]. v' F/ u3 c, T

$ v0 }5 v" m/ K可以输出强高低电平,连接数字器件。  _& f: }' q& Y* m

" N( c0 _7 n3 p3 N+ A

4 O4 F+ O/ B  o) b8 x% L开漏输出7 P- L0 R7 b( T

3 O( ~& \" v+ e- p" A) {

8 N# N, `; I: b9 A只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)$ y# {: E4 M: J) Q% }

; C( Q' S/ e5 y
# A2 S( D' \9 G5 t% m) [
高阻态
8 [* Q" ?# A$ n+ w4 u1 E5 m- {2 @4 [7 @, l' C7 l
" b7 W* Y& z7 i+ @7 Y, h+ \
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。' w2 x+ D2 g/ E6 `+ w9 X6 {
- \9 S9 P% |* O) b0 S
/ S) q; K" P6 @! K

7 J. k7 r1 i& H0 s; D6 ^8 F

9 g& N, V7 w, L) r  f# `
9 Z7 j/ K4 B/ V
6 C, J) A. O- t- L2 ~3 l

% ^$ }$ x4 z( Z* V
收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答

所属标签

相似分享

官网相关资源

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