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

基于STM32 GPIO 经验分享

[复制链接]
攻城狮Melo 发布时间:2023-11-8 14:10
一、GPIO功能描述5 p0 a' l$ E/ h
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。GPIO端口的每个位可以由软件分别配置成多种模式。2 u+ o  u0 u: h
输入浮空3 G% j2 d2 y0 l+ a: s) R: |0 y* R) d
输入上拉
$ [4 }# `5 r3 B+ z: a) [7 M1 C9 z输入下拉( i  a+ E& x: R# {
模拟输入+ X, w' c7 X0 \' B
开漏输出# p% \0 k: F# \
推挽式输出
/ `8 ~7 X7 ?1 e# }推挽式复用功能! J0 J( r/ I- D# ~8 F# V
开漏复用功能
+ ^3 u7 [" W) h( T8 k. V
每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问。这 样,在读和更改访问之间产生IRQ时不会发生危险。
+ @2 m- w  {) I9 j% d6 V' M4 W! i
图1 I/O端口位的基本结构图片
* X' x& H2 w7 n/ \$ _3 f  Y# o
/ h3 z8 _; T6 L  v  ?  U: t5 e
微信图片_20231108141014.png   h( `, k" S: j
% Q; i; N" F2 {+ ?; }" Y
图2 端口位配置表图片
4 q) Y; h# j0 Q1 P3 N% r" a/ Z9 {. g  n
微信图片_20231108141004.png
* O4 ]7 k* w; m' g5 N. y1 q6 _
: S; D# s" y4 @
图3 输出模式位
) b& s. Q, W; E2 h/ h- Y3 f6 N( j. Z
微信图片_20231108140950.png 5 f! z# M2 o2 Q7 c  e5 Y, `

# C: I$ f; p6 x& x: E- I6 Y二、通用I/O(GPIO)
) Z) `! u. i) k0 l- _) q+ E) P& ]2 b复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b, MODEx[1:0]=00b)。复位后,JTAG引脚被置于输入上拉或下拉模式:2 ^7 c7 i' F; K$ B
PA15:JTDI置于上拉模式
# o% S8 @( G( t6 RPA14:JTCK置于下拉模式) M' i1 _! U- ?& x; q7 E- n
PA13:JTMS置于上拉模式7 Y! B' Z9 c) S: @2 L! F- Z
PB4:JNTRST置于上拉模式
* l9 P6 m' _) c  ?& W  Z3 h- f# X7 z$ a6 d% m
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。
* q( I5 R) p2 N1 i; j1 D
8 G% _% i: k- \; f: ~# h$ G+ t
输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。
8 r4 _8 h, u# D3 K, M0 X1 o% D. T. |
所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。
  O5 x. r6 H& `5 E  w& T: _
- O) \1 n6 W2 ]

1 o$ p4 l7 e  H三、单独的位设置或位清除
0 ]" I+ k. X; i! q. e当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改 一个或多个位。+ R* W6 z: o$ G3 Q$ V3 O

' O5 R. s) t8 i6 ~$ q这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来 实现的。没被选择的位将不被更改。
8 ?* L2 R! B% D; O! X( L0 _# R1 @3 P
1 q7 ?  C( `. h
四、外部中断/唤醒线* ]& g; d$ `" s; U, t7 U* ?! s; J
所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。6 ?- @: ?$ l# j$ x. Q' h" ]6 N
# Y* N0 F7 {9 J: e8 z

9 j9 q" |% Q- t& b7 Y9 j% H& f五、复用功能(AF)9 {. t% V% ^  Q- U' X, c7 e
使用默认复用功能前必须对端口位配置寄存器编程。! @7 k* c/ b% f0 Z' w
对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动9 k7 u! e  _! |; d& E- A
对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。- e; F4 j& e  Q
对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。5 v7 K7 O0 _* y# P# f% t: U' X  e
2 P9 c7 j3 c$ I9 o% d
六、软件重新映射I/O复用功能  @4 f0 d7 C% ~" \4 a6 ~# T3 Q
为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些 脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了。
% T. H% a1 {# J, c( v

$ f$ g$ j  Q% r七、GPIO 锁定机制
; k1 ~! s3 Y0 X% L锁定机制允许冻结IO配置。当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将 不能再更改端口位的配置。
1 [$ i8 F3 X5 K2 Q8 U' k

9 W  H" \, v% i. k- e% z八、输入配置+ e9 `- E/ N" B0 t# M3 N
当I/O端口配置为输入时:、% P6 [9 t1 F# K' [- F6 G
输出缓冲器被禁止* v$ r8 [. @! c. Q. |- h$ C
施密特触发输入被激活  Z) K( w( w  A! H, U
根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接  M5 V' T5 S9 F3 \7 Y
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器: O) |( l  V8 d; }& V: ^* x
对输入数据寄存器的读访问可得到I/O状态
/ c+ W+ |: F7 `
  l) U4 Z0 L& F, h* n& V
下图给出了I/O端口位的输入配置) [8 v  O) w  q+ q8 h

; Y5 ^9 [3 a- P0 D1 T8 B  W
微信图片_20231108140946.png 8 k" j& e: Z- N5 c

2 q* y& G) `$ y九、输出配置4 V" k& i5 @# D
当I/O端口被配置为输出时:2 X8 |( s/ h: Z& m
输出缓冲器被激活& x0 b, J* M8 H
开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。/ ~0 [( Q  X9 `+ H
推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
6 L) c2 ^' k6 ?3 x2 D施密特触发输入被激活8 M+ a$ ]) |- ^4 U! R( \5 L
弱上拉和下拉电阻被禁止" l, g, \: ^! g9 u+ A
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
, @* }: W& q' b7 a在开漏模式时,对输入数据寄存器的读访问可得到I/O状态  z1 f* m% m0 K, n7 {4 R* s
在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值( s) M8 b2 m5 Q
1 l/ l' X( x; [" [
下图给出了I/O端口位的输出配置; h. O4 j' }1 E) k

5 s1 o) e: m% X) r: h* P8 X
微信图片_20231108140922.png
. p" [* S4 i+ L1 m
( r' m9 {, j5 n; z十、复用功能配置
- H9 @) Z1 _1 Y当I/O端口被配置为复用功能时:
  w( \, R, A; P! _! E在开漏或推挽式配置中,输出缓冲器被打开、
! t8 J( C6 C; x( a* |3 S内置外设的信号驱动输出缓冲器(复用功能输出)+ z* v- R/ O0 R
施密特触发输入被激活7 K1 _7 C8 n4 f: U; A/ q& m  p, F. E
弱上拉和下拉电阻被禁止
# m0 i1 [2 c- Y在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
7 k) W$ u/ Q2 y) E开漏模式时,读输入数据寄存器时可得到I/O口状态
, W% G5 x9 M' F, m, Z1 I, u在推挽模式时,读输出数据寄存器时可得到最后一次写的值7 T" p$ O1 [# F
, K' [5 n5 \4 u' ^* ^8 ]
+ g- D8 a  V! }  k2 G7 O
下图给出了复用功能配置图片& A' M$ V4 m- V1 _" h' k& |1 ?
5 D3 z, T% w% S3 I' `/ z0 }0 O
微信图片_20231108140919.png
8 T" l, |) I0 \! {% Q

1 O5 Z% y6 X' _) I( E. J十一、模拟输入配置
( ~3 f& N! C- L当I/O端口被配置为模拟输入配置时:
) h( S3 I) ~0 U. h- ^. Q7 ^4 {输出缓冲器被禁止;6 Q% Z# I4 u; H% ~6 J1 P7 e
禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’;
* K  H5 M) _1 Q弱上拉和下拉电阻被禁止;
. k" J* j) [. O5 H读取输入数据寄存器时数值为’0’。9 g) M! o8 r2 o& T- h8 r
下图示出了I/O端口位的高阻抗模拟输入配置:; C! j% b1 L/ X& @3 q" j- S3 `
/ ^7 T$ ]/ I; W2 E" N- V! {! y. m
8 h& P* D0 s  ~
转载自: 嵌入式产品侠( K* _+ K& ~( M5 r3 u
如有侵权请联系删除
% k4 F& F, [( p: h; _
! H$ {! l! m; ]/ O
  s% U6 y7 Z3 J6 v+ N2 b$ ?

9 l! v1 M  n2 q. \& z% U
微信图片_20231108140915.png
收藏 评论0 发布时间:2023-11-8 14:10

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版