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

STM32 GPIO详解

[复制链接]
STMCU-管管 发布时间:2020-12-7 13:19
STM32 GPIO详解
4 g* n4 ]8 ~" k& x9 V' Z
' Q7 C/ L8 R+ ~* C
下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。9 Z8 x  y( f! o' D9 C7 b

, \8 D& k8 t. D3 d' g7 ^

" D: v! a! L0 M2 n9 k0 m8 R4 q: W01、I/O接口电路
3 ]5 H' Q: }6 s$ B: |, S  ]- `3 K' ?带FT的是说明可以容忍5V电压的,I/O电路框图& x4 b" \/ o, W% K& `* w# u8 Q) c6 I
11.png
1.1、普通输入
$ M0 B* N& B4 q普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式$ ?+ y- q7 y- S$ w$ }% e# |

5 O0 ~! X4 a+ X3 x

/ p9 q/ X" d5 x1、浮空输入,不使能上拉电阻,不使能下拉电阻* \' f- u$ I2 ]1 O1 H+ C. `! m
2、上拉输入,使能上拉电阻: E# g  T# b) n+ d
3、下拉输入,使能下拉电阻9 Q+ a% l+ `. R' s
12.png
从上面框图得知,输出缓存是被禁止的% l. R+ b: [, ?: c' E3 Q" `

7 p" M4 q) \/ O. P" N

; K9 i( Q6 I6 f9 O4 J9 \. ^1.2、普通输出1 x) B( u% T( y# s' E
普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式
. t  c! @& M5 D4 z. v+ P& E* V- \" }4 x5 R$ i% [
4 ?4 T& d1 e8 ~$ T" H! C
开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能)& l. x  F+ Z# Y/ s
推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS# X- Z( `& N% q' P- T$ d
13.png
从上面的框图得知,
0 d# d* ?2 |& E# y* R5 \, ?( v. u2 r1 T" {
4 w- w% i0 O: N
1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。
/ W6 H( q% e( K/ B" G2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段
* o' H  k7 p/ j: c# i- R% r$ }
5 S- n: L8 P- ~' H, i8 g" Y6 c3 w

- I; |2 x, h/ y7 x7 ?. H( G1.3、模拟输入$ c2 H2 G. i( \: z$ e8 d, O
模拟输入上拉电阻和下拉电阻是没有用的. H* ]: x3 E' y0 Y! b& X

/ W- X/ u2 c9 b2 ?  O* }# Q& j

, V+ b' P$ l! [! {0 y$ }9 }+ N; P# F高阻态下模拟输入
% G. B  o( s0 K  v3 I
14.png
从上面框图得知
6 j9 b. l4 N& {
# p2 X& `/ n3 }

- e, i7 E6 e7 w# C弱上拉和下拉电阻禁止- y3 [% q/ B7 ?3 ?7 P7 w

/ }0 {2 k, i! {: u) r4 @4 e
& E4 ^9 l: P0 z; {  N& ~& x- t
施密特触发器停用,施密特触发器输出值强制为03 L, u# }7 F, ~- v* j5 j5 N  \

( ]& E* e& Z( R' @: f+ i

0 d: v) Y. w; w* p5 c) n输出缓存被禁止
2 M6 s' D3 w& A9 L
$ ~9 h& U3 Z6 b' E/ i

& c; y6 ?; Q  k3 M7 n读输入数据期存器, 读到的值为0. ~/ d- F" J7 l
3 @& x( D! ^% k) @6 ]' n
( B& t6 g/ I+ C4 @: f
注意:IO配置成模拟输入时,不能容忍5V电压
; D9 f4 O  p6 {/ s+ R
& y, d  r" \" G: V0 @  s" c1 X

. |# _! r1 c4 I3 \+ u  N" e! J1.4、复用输出3 C: a$ @3 h4 I3 i3 O
复用输出框图
$ X6 {4 G! q% _( t( a, L
15.png
从上图框图中可以得到5条信息
- ~  E9 r) O2 L% p8 R! D. |+ m2 C2 P$ p% L: v8 X$ |( w
' h3 [2 q5 M& O1 s6 b
输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的
( B) |( f) I& r2 ~' S% v3 M/ ^% I6 m9 N- k

+ q& _$ o* u- Y由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出
6 [( p8 h& P4 U0 }) q4 f  g& L7 _  G+ x- I( C3 F
3 T7 A# p) j3 X4 |& f, c
上拉电阻和下拉电阻使能,可以进行配置; t6 q, B; d' M9 ^3 b- _

- z, t- j8 W2 p7 K3 h% E* j, V1 `
& t5 I" f) n1 g  X& p1 [
TTL施密特触发器使能
1 U0 A: P6 ]% p
1 q) k3 j' U) a2 r. v( c/ N

5 v& f2 k- `2 ~9 F3 w可以通过读输入数据寄存器, 可以得到 I/O 的状态
, g9 W& m2 @/ w, k/ B( X
/ |$ ^& _0 Z- K2 B$ w$ t02、管脚复用和重映射. a* ?7 }' I! C( {, e
管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能9 u% e; j4 C8 m; ^- U, [- M
  @; {0 o5 ?9 s$ R9 c
+ K6 C4 K7 }) m. ?* s
2.1、STMF10X系列
$ n, y! w) g/ [+ tSTM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。3 x# p/ b' I3 ~2 s- a' P1 ^
16.png
三个红框交汇处.STM32F103VCT6这个CPU的USART1接的是PB6/PB7但是上电初始化后默认功能并非是USART1.所以想要用串口功能.必须用端口重映射。: S# p: s/ `) a5 y* e, R5 _

. h# r/ w( p* n  {4 [+ }) a, q
4 v! _3 F/ F' W# A& Z
STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:& `* C* g9 Q* Q
17.png
重映射步骤为:8 P9 q* g0 Y4 L7 i% m& A. {

( G+ u& k" g9 s7 {; m& ^$ D

; P* ^+ Q- O& e1 y. O1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
1 u- V- f/ Q! q8 x
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);
复制代码
2.I/O口重映射开启.. I& l# r7 C4 Y+ l, m' b/ S: F! B

' b( l8 v; b% H4 i

, {8 S; ?3 A6 g( I% nGPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
" ~. {8 p: [, P3 V$ G; x1 I3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.​​​​​​​
+ s% \, i( _/ H; X2 |7 }

  1. 4 @+ r$ t. T) i) l# `# J) z1 |
  2. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
    " P% X- \  m; Z4 I9 C: s
  3. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;2 X* C4 x* F8 f, m
  4. GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
    : `9 |: h7 a2 k* ^3 o" m
  5. GPIO_Init(GPIOB,&GPIO_InitStructure);& E: S5 J$ {. S2 C$ q

  6. % x3 O3 s0 a  \- c5 f/ B
  7. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;
      @' X) n" N2 W' L! U
  8. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
    ; T5 v0 l4 A" a5 ^& x/ T( ?6 n* f
  9. GPIO_Init(GPIOB,&GPIO_InitStructure);
复制代码
2.1、STMF20X系列
" `/ @/ \! e, f" m, dSTMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。3 d+ |, q8 r6 s, ]- @, K
18.png
从上图看出F10X系列会有专门的普通IO寄存器,会有复用寄存器,使用库函数如下:4 V1 h/ r; Z, W
  1. void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalStateNewState)
复制代码
19.png
从上图F20X系列使用了复用功能寄存器,然不是像F10系列存在专门的复用寄存器,F20X系列GPIO复用的功能更广。
5 G& v2 X) T* S) G& K" m8 n1 N1 Z1 T
0 w2 u- T# v$ Z9 @0 ]. I0 Z

9 `6 s  m: r) N  J0 Y备注:要先配置GPIO为复用功能,再调用复用的库函数
# r1 F6 q! d& I/ |9 D
20.png
03、相关名词解释& a9 m% _" e/ B
GPIO模式名字解释, L, ~  D8 s9 L0 W  v& o
21.png
F20系列:GPIO共有四种功能​​​​​​​4 H& Q7 T* G9 s* {7 ?: s/ H' {
  1. typedef enum
    / T% `; m- ?2 n2 e1 O
  2. {
    ( ~! ?, J  X7 W1 Y( Z! T5 r
  3.   GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
    4 c/ f! B7 [! C0 X' f
  4.   GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
    ( z- w5 _% S8 {
  5.   GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
    6 U% X5 F/ M; U. p" `
  6.   GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */. |' R2 z1 G5 G' z" w& V8 S# A, q
  7. }GPIOMode_TypeDef;
复制代码
GPIO状态
1 T) i0 ]0 z: f/ l( R& H0 A
+ f( V5 r2 q3 H. ~4 E
, p4 m8 f( T, E; `3 A9 x
推挽输出. F  n" Y8 g- F! p

9 x2 T" d; F0 U
4 s9 J# O/ k& `  ?) t, z- K/ f
可以输出强高低电平,连接数字器件。. f. Y# {2 m7 R+ Q0 L4 P

7 \8 Y' [0 |0 @: {; o. B
# A2 [# X& U' ]
开漏输出6 k6 ?& B- M! u" d1 R4 w0 i; s
7 y" U1 T# ?7 M, f; @: r

; y1 F! i" p/ N0 Q9 G2 z) B7 v只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)  i6 m# r$ g3 c/ s! h8 _
; q- C' r9 l" p: M. a4 X& f. L# n, `- Y

7 g7 M- I4 U$ R8 Q: g高阻态
! ~- w* h1 i% X) q) k5 w
% t: F( }" [0 o
5 q& [8 J5 U- Q2 a2 e
高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。
' V' f8 p" s, l
+ L0 z8 S8 r8 K, o: k* @5 w
* n! W+ B# c1 h; i
# w- \- b; ^5 W+ g; B. H
3 [' P+ H2 c* c: Y5 Z8 }# _+ u

1 d6 J, {& H1 \( h) O) U# A) O( t4 h
4 v  `# ^" c1 S. o# `, O7 I

7 H1 X7 g( }) X3 i  C
收藏 评论0 发布时间:2020-12-7 13:19

举报

0个回答

所属标签

相似分享

官网相关资源

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