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

基于STM32 GPIO 经验分享

[复制链接]
攻城狮Melo 发布时间:2023-11-8 14:10
一、GPIO功能描述
" |% G( o* ~: p. \' E0 t1 t  ?每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。GPIO端口的每个位可以由软件分别配置成多种模式。
$ H% D5 M' k# S7 \2 P输入浮空
( J0 ^. M. T1 S: s输入上拉0 @7 i2 z' N# \( C' x1 g" h" \
输入下拉+ f  f* `1 O0 r8 c2 S' a! ]- Z: N
模拟输入8 V1 [* |' ]) \0 A! {: H: w
开漏输出
3 l9 @& k: z4 A& N推挽式输出+ n5 A0 I; W, R0 [- x
推挽式复用功能3 A* ^+ i+ M9 _/ z+ V
开漏复用功能

! S, s. ~5 {% R8 ^- c
每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问。这 样,在读和更改访问之间产生IRQ时不会发生危险。
7 u( q- Q4 ?2 b5 B; U# [
4 `! V" l9 g. [8 ^( L  q' d图1 I/O端口位的基本结构图片
/ N$ E3 J& G8 `$ B2 q, ^" Y" \$ R6 t5 F! S. e+ L+ Q  b
微信图片_20231108141014.png , Y+ r7 z8 i& P; z
5 n7 K- z4 [! r' c
图2 端口位配置表图片, U& E: e* n5 Z: W
" G( }" z* e6 E7 f/ d
微信图片_20231108141004.png
. B4 |4 j# \4 T+ i  v

4 O* s; ^  C0 B9 m( S! b图3 输出模式位1 l* Z+ E" H6 ^. R
) j( B& a& t' {2 X
微信图片_20231108140950.png
0 [3 t+ }& r5 m# X0 B7 v5 w# Y2 G
( E0 @  i) q% X, U9 k
二、通用I/O(GPIO)
9 J; x( }# ^! p( r$ b复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b, MODEx[1:0]=00b)。复位后,JTAG引脚被置于输入上拉或下拉模式:
+ q8 W6 [+ v6 z" x+ sPA15:JTDI置于上拉模式
" D7 ~( h1 f1 cPA14:JTCK置于下拉模式
$ F$ r  P+ _. m& |PA13:JTMS置于上拉模式
0 _% ]+ r. b% LPB4:JNTRST置于上拉模式! M/ U9 W/ r) {

# x$ b2 l) }4 X" x
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。6 o5 k* C# J. N' X5 E

- a9 g& e3 i' X6 @9 `  Q3 h输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。( @9 v* E2 [1 O. I

: ]0 F5 V2 ?; h9 G. r所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。3 K* p0 f( @( u; D3 B# C2 ^
% E. C% Z5 ]- A: _% w+ q4 B
8 X  }6 N. v2 B# Z
三、单独的位设置或位清除
7 d/ ~1 E( D4 g- b# Z当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改 一个或多个位。
7 o, A; B% q* p5 V9 L! Y# _
2 p3 p$ [; K0 b这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来 实现的。没被选择的位将不被更改。* g! T" Z4 H  F3 _. d# L  n- L
6 p  z- n' Y' z! `3 }* D3 E1 c

3 |. e7 t/ J$ B7 ^9 F2 K( b3 @4 S四、外部中断/唤醒线/ f* g3 g4 i* o' |
所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。
$ v/ I$ q  ?8 B9 E+ w; o; u9 |- c
$ i. k% G7 l" ^
: z% S# F7 y7 n2 R9 M: A, E$ h
五、复用功能(AF)  A2 f( w9 m4 X7 r/ k) y- Y9 i
使用默认复用功能前必须对端口位配置寄存器编程。! R" ?4 @. D; u
对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动
, b( d& b, }: V5 T对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。, `2 \% D) \& O' z+ J
对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
0 P( D) w" Y8 x) m
6 w" p8 @4 X. ], y( F7 A4 G
六、软件重新映射I/O复用功能
* @" n; d' N3 t) {" ?: k) [为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些 脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了。* @" H; I0 P7 E: Y
& z/ G0 D/ u. h; y% q
七、GPIO 锁定机制4 j6 }! w6 ^/ m1 x* \0 W
锁定机制允许冻结IO配置。当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将 不能再更改端口位的配置。
0 H7 E$ d  L9 c+ a  h* R4 y5 ^8 q
, l% G, ?" o- f: F; F" W
八、输入配置- O' {1 D2 j' @
当I/O端口配置为输入时:、
' t$ Z8 }! A- @/ Z4 J# \输出缓冲器被禁止
( f  w8 i( z) |$ k, R% d施密特触发输入被激活9 c! F) {6 Q- \# V7 U& w; g
根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接; V. b3 P& s4 o" k
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
& D$ k- h  i; \6 F9 `$ y对输入数据寄存器的读访问可得到I/O状态% K* p/ R' P" }, w2 q. X- u

2 @  O( W' N$ `/ f3 b
下图给出了I/O端口位的输入配置
* u5 T& A* N3 u' L9 Z( o- K0 p
微信图片_20231108140946.png
* m4 c4 p$ ^! i: }3 M; U( D! u7 W+ Z
九、输出配置# z" |% F3 A, I% j3 ]& z7 ]- u
当I/O端口被配置为输出时:% R8 m( `% K1 X4 Y: S9 J" q
输出缓冲器被激活
8 x3 {2 q7 ]# b* Q3 Z* p( e0 m: c开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。
0 H5 a2 d0 L0 G( j+ S9 l推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。' T" |+ Q& w. v( u2 V
施密特触发输入被激活) F8 x- y* j& i- H
弱上拉和下拉电阻被禁止9 }/ j. A# k! A1 w5 e0 a
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器  v6 A: x. @! f, Y* V# C
在开漏模式时,对输入数据寄存器的读访问可得到I/O状态4 v1 s9 v& I% F! Y4 x
在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
2 J) P' D+ e3 ]3 g/ J( V4 E& y3 j" V7 C$ k
下图给出了I/O端口位的输出配置
0 Z2 L( ?! c* J; U2 D7 ~# M% _" d2 z2 M, f
微信图片_20231108140922.png
0 H9 h* J7 Y1 e7 d9 c! B# A* U% d4 N* c1 w4 d( r
十、复用功能配置
# H7 B: n/ g" [6 a0 e当I/O端口被配置为复用功能时:
+ M$ m8 x7 k7 c& O+ m+ o在开漏或推挽式配置中,输出缓冲器被打开、" s+ x% [2 A7 E
内置外设的信号驱动输出缓冲器(复用功能输出)
; b5 A$ ]  j- P6 M; E$ p/ f施密特触发输入被激活* C9 ?8 ~( M5 x4 m
弱上拉和下拉电阻被禁止( U& {, j3 Z4 a! o8 i0 a4 r
在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
6 Z/ |7 y. t8 {- d! I& ]3 o开漏模式时,读输入数据寄存器时可得到I/O口状态
  d5 l$ e# {) ?' L4 O在推挽模式时,读输出数据寄存器时可得到最后一次写的值
8 H! N( e2 [2 B# R& D! U6 ~& g9 _
" T8 Q% |* d0 g; ^/ n
下图给出了复用功能配置图片* i) k) h" Z2 C( Y' i$ c
* h( `$ p* T, u. k% @1 P
微信图片_20231108140919.png ! e& ^5 M5 c+ O: C/ ^/ `- R
! S$ p  p3 s$ R/ \* f
十一、模拟输入配置
9 c2 s! P% W) X当I/O端口被配置为模拟输入配置时:
2 H4 e% ^5 @4 O3 a: ?7 W4 A输出缓冲器被禁止;& H2 B8 `! J7 `+ V
禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’;% d9 C  @' a) I- ]( ^  Z0 Y
弱上拉和下拉电阻被禁止;
! T( ^4 ^5 V. Y& D$ B读取输入数据寄存器时数值为’0’。
) C+ I7 D& C9 c" x8 f$ |' K下图示出了I/O端口位的高阻抗模拟输入配置:
; h/ ?$ M; T$ ~$ W) H5 h4 g7 S' ]# t  }$ o
* K7 A! K3 t2 A  Z5 S4 k+ n
转载自: 嵌入式产品侠
3 C  J* I/ [  @9 |0 ^如有侵权请联系删除( c  x& |1 Q' Q: l5 P1 t+ ^3 t

1 j; _5 f, e% L$ @# o

/ P* [4 d+ M+ [# o) T2 i1 h! h8 o3 r9 F( B/ ]0 U
微信图片_20231108140915.png
收藏 评论0 发布时间:2023-11-8 14:10

举报

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