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

STM32 GPIO详解

[复制链接]
STMCU-管管 发布时间:2020-12-7 13:19
STM32 GPIO详解
0 y; {8 w) X% `, v
4 @2 i/ g/ E1 G" C; M* B, a4 e( K
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。  {( L: a) J+ x2 h

& d% X. z, t) R3 i# {$ V4 g

. q1 B; U, `! D- A01、I/O接口电路5 L7 D. t) b+ y5 G
带FT的是说明可以容忍5V电压的,I/O电路框图
% U3 \& X2 h9 p& l" p: q) S; z2 m% z
11.png
1.1、普通输入
1 B' e- j5 x5 E  @- G普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式% e0 {3 S' X' h+ _  n- Q
) S& d6 w1 B+ e, A7 I

+ D9 ?/ y7 J6 ^8 L1、浮空输入,不使能上拉电阻,不使能下拉电阻
6 y+ D) x/ ?& o1 l5 ^$ n2、上拉输入,使能上拉电阻7 F2 s- Z! R7 ^
3、下拉输入,使能下拉电阻- _  o2 K7 _# ^0 L" m) f  E5 `
12.png
从上面框图得知,输出缓存是被禁止的1 O$ f0 j. a2 i

7 j( M( O, `7 b" P

! v: b6 J3 x$ H) O1.2、普通输出
. B/ t  D6 ^) B, I普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式
$ p8 |. ^, W9 O5 H" d! n# M5 @, g
6 Y7 h, Y0 K) u9 B) ~/ s
开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)
: J! j$ ?8 ]! {& ?推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS
! u1 U& O% f1 @8 |# U
13.png
从上面的框图得知,' J' a  E' V& l' ]: S3 M- \
  r3 X' a& U1 C7 J/ ~* B
! u2 x0 D  v, X% L
1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。8 F) C! X0 \, m8 l! L8 a
2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段
1 j) O" }7 N2 Q7 p) x8 |0 y" V8 i) ]" s# v" t
& S: X: L, N' P5 g; P& I
1.3、模拟输入
, y) h7 w$ c$ i) D模拟输入上拉电阻和下拉电阻是没有用的' f( V0 n' A) u( {
  a, P$ Z& f% t* V6 {

/ d0 G' a6 K5 P/ R  c- |高阻态下模拟输入
( z; \3 {0 X, ~# V5 L0 }
14.png
从上面框图得知( ?' Y) t( F4 T8 C2 W/ v+ j) A3 I0 B

. U' N, s/ R; S

. r" n& b: |2 z" z$ {/ \弱上拉和下拉电阻禁止, m$ J* r9 U2 P0 N

1 X" _* q% @, I  k9 w9 S
) t& P1 `0 z+ c  D- z" w
施密特触发器停用,施密特触发器输出值强制为0. q3 Q' V/ E. n3 \2 g% e
8 S3 V5 m) h3 e- D8 u' z4 R

  p7 v& p' v9 J% e4 L# E; h  p' E输出缓存被禁止
7 `+ _$ Q/ r8 _
$ e' L1 v9 m! S# N8 N6 i: [

4 a: l' r" {1 t; A) V. R+ ?读输入数据期存器, 读到的值为0
; D9 c6 s: i6 v* u( e5 b( [& J' L$ k7 m5 Y1 \6 }
% W; D# _( H. J5 {* w) p
注意:IO配置成模拟输入时,不能容忍5V电压
7 U; b8 h7 e3 |8 J/ @# A) u0 k2 f9 H
4 j0 E+ p) d, k
1.4、复用输出
. o; A6 d6 T8 [复用输出框图( k/ Z5 F7 P: D
15.png
从上图框图中可以得到5条信息
, p& u+ \6 O: A5 a: i/ `! O% n2 F% M/ `4 m

3 N$ _: V, R0 u输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的
# _9 t. f! v+ `% K( B, U4 t+ x
! x4 |6 D. E" I& A2 `# g- g& X

' s  \$ @( m& u2 @; E由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出
% T; B# s$ L1 K! ]( d- z  L
( i. w! h( U  ?4 R8 F

4 z+ g  m2 p8 L+ T3 A上拉电阻和下拉电阻使能,可以进行配置4 l5 w4 K0 R1 ^5 Z! I8 P. |

: N0 l1 P2 ^% z4 U6 q: Y
! y9 h! }* P" b& d% O! _
TTL施密特触发器使能
& m/ Z0 H1 h' r9 O- m8 @; Z
5 |. T3 Q3 N3 Y4 x' i
; W( i( ~1 Z5 |# H' {
可以通过读输入数据寄存器, 可以得到 I/O 的状态
4 S* G0 H5 _9 u! K7 N  X! C. T! R( g
02、管脚复用和重映射
; E8 p5 h6 G# N* I2 |管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能  ]' H+ Y1 L, n0 O. O. u: W# ~# ~

: [2 l" F+ \6 G' f: o: i; ^3 Y

% B" j5 D3 h% G- f" g% D) o2.1、STMF10X系列% g$ ^  z/ ?% s5 l7 H9 p, K
STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。
' V1 K3 t- b: A1 [, ^
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。  Z4 U' y! a7 b8 q* v" K$ s- d
' g. W0 ^& F5 t# T" p" X( A
+ a: V- b* r5 \8 h( {" N5 M6 Q
STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:, X7 z% k% D9 ]! y$ r
17.png
重映射步骤为:
0 ?% F5 B4 F6 d8 X/ v% |0 U* Y" Z& u0 M* o1 S: V: B- X

6 B7 X/ N' W! V: _3 b7 ?" D1.打开重映射时钟和USART重映射后的I/O口引脚时钟, ( ]* ?5 @8 M" t5 Q  }5 U$ R' a3 y
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启., V6 _- \2 L2 q+ r# ^- q

" P: p6 w1 V3 D+ w) \

8 _8 L) x! V6 b  E1 |. i% z2 tGPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);4 O; D. C6 ]! V* O
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​
* Y- F& @  P6 T- u2 r

  1. . n! S2 [4 \" E5 Q
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;; G$ T5 N, \2 Q8 W( O1 G
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
    . ]0 o8 G9 R3 }3 b( O$ H; V
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;9 f: \* c* B3 M: l8 t6 |; x
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);; e+ f. {+ E  }7 N4 R
  6. ! o! |* K# ~; G( C8 b" C6 P  v
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;5 L1 B* @! `5 G% z# U7 I; b
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;8 d& S; x2 e' o" p8 C
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列& o5 P; ^! y6 @; d" a4 b
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。
! a4 a" ]" p3 o3 v* f' W
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:
  ~5 v' Y5 W5 z5 Y; s
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。5 {# d! i- i- u
0 a$ X  V' E5 k6 Z& ]# V
- {2 Q. T) [: Q
备注:要先配置GPIO为复用功能,再调用复用的库函数
/ V: x: {+ J( C* x& `( z
20.png
03、相关名词解释
. j% N& E# S0 {GPIO模式名字解释
, z, H9 y$ t- ^" G3 d- i
21.png
F20系列:GPIO共有四种功能​​​​​​​
+ J. ]; ]$ p/ \' a' Q$ |" P
  1. typedef enum1 g; I9 O+ J7 \% K4 f" M
  2. {
    ( ~" u5 g6 k4 ~: X+ x* C
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
    1 H0 s: Q. A2 O2 [( e
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */9 K% s' o$ n, N1 f
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */* Y& T# I' m. `4 @8 H. s6 H1 f
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */7 p+ h, d" `& p, E# S* _! Q
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态  D' n" h2 W; X* g- V( d  r

$ h! M- n8 V% H( u0 j4 D, W

. K0 Q; f- `# \$ A- D6 I! ?7 d* x推挽输出
, u5 U% D2 U, C/ S2 h
8 g" i5 j6 R8 b8 h1 F

2 ]3 l4 x, r# S+ E; W; z可以输出强高低电平,连接数字器件。& A0 z; j7 Z% L8 V! z( t

4 V$ P# [  U! f5 C
/ T0 L" V  B" I0 e# n9 ]
开漏输出
0 ?' a  {+ Y- ]8 h+ _) X
/ E# O, g3 V! x. T; v  W# @( v
# v! `  o& |# R% p3 [, V
只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)
% _6 M+ H0 F& v, e
. v6 L2 z! P3 \1 J

5 K$ k* X$ E$ |2 b3 I# c3 m高阻态% r) V3 T: [/ \2 L
2 }% `5 \; z) O$ }( O) _
9 G& u% I% K6 s+ L$ }
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。
" p# C& u" p0 x( p% g/ n% J  l

; N: O; f* f# I; X" [3 f
1 v& X/ v7 L6 D( R" s: f/ Y8 c

+ M( l, _2 j( D( N/ s1 V
  q- J% k/ \" r* B$ x1 {
$ s) k+ M  e- T0 R6 C, |
$ C& w' `4 W. w- @+ O3 i8 f9 Z8 k
收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版