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

【经验分享】STM32F1 GPIO工作原理

[复制链接]
STMCU小助手 发布时间:2021-11-26 18:00
/ r! R) w4 ]. `& ^' p! D
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2tyMmtLNThDemU0UGx6bFUucG5nIXRodW1ibmFpbA.png

$ h# _' j; Q3 r" c, h$ u( F; d2 T5 u7 \8 V, ?- J' S
STM32F103ZET6(144脚芯片)
  y- q6 c1 F' p) Y( i+ g6 Z3 I( t0 I! p& Q" I" ~
7组IO,每组16个,一共112个IO口。0 I/ [1 P0 T0 H7 Z% ^/ i/ |6 P
/ {* V7 b, t: K5 B3 p, L" f
GPIOA,GPIOB…GPIOG
4 {, {$ L. \  _5 U  E' O6 n" B* O. @+ L
GPIOAA0~PA15(A,B,C,D,E,F,G均是16个IO口)
: [  T9 I& T% ~% N3 Q/ h; f# L% y  M( f" _7 X/ U
FT表示可以容忍5V
% ~2 |' [; g' B* Y* U% d+ p' A( l  `9 h
一、4种输入模式:输入浮空,输入上拉,输入下拉,模拟输入
: x/ f0 ]$ s/ n0 x+ S1 U- Q& }$ H4 e, Q1 d" |' T% D- J4 N/ F/ s
1.GPIO的输入工作模式1—输入浮空模式% X8 L2 }1 l( B& M1 F! U
+ p& A- d! B* B4 }) Z  ~
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzJRMkhacVhKb0hRQ3hEUHQucG5nIXRodW1ibmFpbA.png
8 E) ?% U: p2 j

/ u  {6 A* p, E# x9 e0 l  q: ?2.GPIO的输入工作模式2—输入上拉模式
5 i. k; t. @! g2 U7 T9 r
. ?& I+ Y! f$ z/ W; k; c9 ]
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mLzZWNWtYY1VtSjEwTmRiRm4ucG5nIXRodW1ibmFpbA.png

* R( v1 X- G; U) U, D( i# }' b7 |* m$ b5 w# q. N% L" \( \
3.GPIO的输入工作模式3—输入下拉模式6 h% A) d  l1 h0 y  Q! L- ?

9 ~1 I7 t% J" \1 g$ R6 o
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2VQbVR4NGE1NTBZaEtkcUkucG5nIXRodW1ibmFpbA.png

- k, _/ z& n9 n) e' S
7 @6 s4 N$ ^# _4.GPIO的输入工作模式4—模拟模式
( N7 R7 P$ h$ @! ?# _8 |( X) A8 K  H- U
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1R1V2NzUDV4VzRzamJFQXQucG5nIXRodW1ibmFpbA.png

+ y. k+ Y7 E+ p  d1 o! U7 C6 H9 y# }$ g; G
二、4种输出模式:开漏输出,开漏复用功能,推挽式输出,推挽式复用功能
' j7 z  C+ I+ v4 T( {2 Q
) S! x8 a& b7 k* @' W1.GPIO的输出工作模式1—开漏输出模式  t- h( b( @: x6 [
2.GPIO的输出工作模式2—开漏复用输出模式
# C. v: C$ u3 ~  c! d7 S1 b
4 c" s2 g: \0 F! ^1 E3 w
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y2UWIxMUV3cnBVTElUaEEucG5nIXRodW1ibmFpbA.png
, ?8 ?3 \7 z- s6 C) e/ \0 i- B+ i
. [: P5 t+ Q( A- y
3.GPIO的输出工作模式3—推挽输出模式
; Y# b# r& e& a# ^2 E% H5 J: P* x# Q  _( x! r, n0 o
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2pGMUJyVTdSTWY4MGVNV3gucG5nIXRodW1ibmFpbA.png
( j/ A: r- S' B& p$ V" o, b
& f- O6 y5 e& q2 \
4.GPIO的输出工作模式4—推挽复用输出模式
5 x- u2 t9 Y% K. B" c
! `/ {8 {- o& V9 ~) g! v$ {7 z3 X
& X- e  D' |! K" L

7 H* e" Z2 Q6 m" i6 }! W$ ?# R4 K& f& ^三、3种最大翻转速度:2MHZ,10MHZ,50MHZ
+ |6 ~' i7 U$ F' h
1 G) b& `4 x2 R6 h四、GPIO工作方式0 G' B9 K- H% g3 h

2 t% U3 a% M6 H* J' h推挽输出:可以输出强高低电平,连接数字器件 。+ G( H8 X2 L% ~& X' A7 w

% @* {9 s% U& X- u9 A开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高。  d! W) h: C6 P& O' b
7 g4 @$ |# |, I: B
每组GPIO端口的寄存器包括:
8 J9 b; x$ |6 p+ k- _) G
0 p; [' U9 w: Y4 K1 U" v两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)
, |$ q5 s5 f( _$ d* R/ j$ m+ Z  I) K/ e7 O9 P
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
0 ]& _% C+ W% j3 K* N) j. Q( p& L5 ^# \
一个32位置位/ 复位寄存器(GPIOx_BSRR)9 ?/ x- J$ N8 q5 O
) D1 Y. P* o$ w
一个16位复位寄存器(GPIOx_BRR)6 C4 Y( ~' N# y3 R" z
, C5 J4 {4 O1 q3 E& ]. Q- O
一个32位锁定寄存器(GPIOx_LCKR), V8 o  k( h6 t6 ]6 q& ?2 `
5 `* \+ W: L  ]4 C# A: @+ G+ i
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问) 。
" O! c4 H  M  h3 k+ Z& R" D& M
& I" V  P; |# a1 c& n每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。
* n0 E- I/ u& b7 v, i' y4 q& }3 G( A: R  N4 U, |5 n
GPIOx_CRL :端口配置低寄存器
- m0 j4 J: t' c
9 B9 _, e# D1 t$ E2 W) T6 Q6 TGPIOx_CRH:端口配置高寄存器; @( r+ @% z( G& ]

3 T/ h  ~4 h% R3 z' B; {) lGPIOx_IDR:端口输入寄存器
& B: L, U" T6 a. Z
( ?- L' R0 L2 H2 N6 l9 }( eGPIOx_ODR:端口输出寄存器
* _* {3 X6 ~1 D$ n( G
9 Y2 x( ~2 `1 X0 l( ]/ ^% RGPIOx_BSRR:端口位设置/清除寄存器
/ u5 R9 K% s3 b3 A# K# }  a
9 m# v( g. ?" X" IGPIOx_BRR :端口位清除寄存器6 _6 F2 s9 m4 q5 ^9 S) n; S8 Q

. W1 X$ K1 b' E. i# S  z3 VGPIOx_LCKR:端口配置锁存寄存器( H: e8 G1 b5 L$ c2 k9 z3 I1 |+ T% T
$ F! @5 p; R- r; n, @- U
1.端口配置低寄存器(GPIOx_CRL)和端口配置高寄存器(GPIOx_CRH)
5 N: S2 P% u1 s9 Y% f; n4 x! _8 F% i
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL1BhT0JSTGNqVE1vRkQ5c3oucG5nIXRodW1ibmFpbA.png
/ k( f3 v* `! H( n

4 l% u; ^: y8 q& b2.端口输入数据寄存器(GPIOx_IDR)5 ]7 X' a7 a8 A9 N: p" A

% X+ `- f7 n; d: E5 B, T9 L( `0 Z2 d
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3BxcG1UTjV5cUowYVd3TEEucG5nIXRodW1ibmFpbA.png

+ l8 Q. a2 \: q1 e  J9 ]3 ~; _. k& \- m- [' V% y2 q( W* P
端口输出数据寄存器(GPIOx_ODR)
( Y" g* D4 ]3 C1 o$ b. {
; @+ |- @2 k- u" q3 M, v& \7 V
  U! Q3 V0 a: Q! O! _# W. W  c0 }
/ d" k( P* V# _3 G. F
3.通过设置ODR控制端口位为上拉还是下拉输出模式
" }1 H8 }# @) A
& V1 P. x  q8 z# t
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL0VyV1RRYTFtM3NNVHR3TXEucG5nIXRodW1ibmFpbA.png

. x. z7 C7 N/ F( j
$ R7 B* G/ X" T# u! ~1 g9 rODRx设置为0就是下列输入,ODRx设置为1就是上拉输入。# s. E; M" Y9 q, C" w
7 q* D) w, L# ~
4.端口位设置/清除寄存器(GPIOx_BSRR)' W) p# y  Y5 q! L2 j, }
' c/ p( j; \/ [; O% [/ f, ?. V
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3htWllNTVAzbVVJd2JTU04ucG5nIXRodW1ibmFpbA.png

* C2 ]4 S# @* W& a, ?& |, u+ J
2 O" G: p" R0 X, w' @. l端口位清除寄存器(GPIOx_BRR)
7 k" V, f" G: L5 y2 ~/ }# S) h0 S2 |3 C
通常就采用BSRR的低16位和BRR的低16位,因为BRR的低16位与BSRR的高16位作用类似。
- C: k2 A$ j& [1 b1 l+ |+ l1 \* x
5.端口复用功能: STM32的大部分端口都具有复用功能。 所谓复用,就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚。& H* V2 m' L/ h! b

2 g- Q' }/ h. {4 H# S6.端口重映射功能:就是可以把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。  b% ~& s. }; J7 t' c1 J( a# ^* _
. G# @! n" q( P' {% Z
和51单片机相比,32所有的IO口都可以作为中断输入。& m! \4 M; r: G% j1 }. X% t
* E- z2 u6 {* ^8 M$ g! _5 }5 Q

7 r% ^. O: B# j9 `# x9 h
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL2Y3UjRKRWhXMVM4U0M5NVQucG5nIXRodW1ibmFpbA.png
aHR0cHM6Ly91cGxvYWRlci5zaGltby5pbS9mL3N6SUlKOGR2UldRWmJZTmEucG5nIXRodW1ibmFpbA.png
赞 收藏 评论1 发布时间:2021-11-26 18:00

举报

1个回答
tianqi911 回答时间:2024-5-11 11:06:41

非常清楚 感谢。

所属标签

相似技术帖

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