STM32 GPIO详解 / E1 P1 `- K/ T5 Q2 m) C' {3 W- z; W2 J' |/ _ 下文将根据STM32F207参考手的中GPIO框图讲解GPIO功能。9 W# C! X/ O! _$ ~- r " d& {7 _- B$ h3 A" _8 z 01、I/O接口电路8 `- v4 F) L3 {5 \/ p" g7 V3 U5 ] 带FT的是说明可以容忍5V电压的,I/O电路框图 普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式 3 e- d/ J' V. n# {2 }9 r 2 ?. @: J% o. n+ m5 ?- c 1、浮空输入,不使能上拉电阻,不使能下拉电阻# C) s# _+ f: y J 2、上拉输入,使能上拉电阻) e8 v) I( U K4 e& [ 3、下拉输入,使能下拉电阻: y; V P0 A/ i0 \! V" V$ w ' j. U4 k p! _ 1.2、普通输出# I) _, \" a5 F9 b 普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式 5 B1 a% ^, H9 G$ z3 [- j: P 开漏模式:输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,端口保持高阻态(P-MOS 不会被使能) 推挽输出: 输出寄存器是 0 时,激活 N-MOS, 而输出寄存器是 1 时,激活 P-MOS6 D- O5 t! P0 a* t, S+ Y ` 1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。 2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段 % V0 j) J9 a J. l" D4 ~8 [8 }! k & w9 K+ L/ \' t# y' H 1.3、模拟输入0 W# y+ C7 g, W, B; x 模拟输入上拉电阻和下拉电阻是没有用的+ Z8 v; @) z, _. z0 P' c6 L8 j2 d 3 X" u2 b9 S* o. V0 T4 A 高阻态下模拟输入8 l3 `4 U0 W9 ?' u3 y' p, N/ L5 @ 弱上拉和下拉电阻禁止 # V6 g2 d4 i+ t3 {, `) ~; i 施密特触发器停用,施密特触发器输出值强制为08 {, m. \; @' M: K( @' I 输出缓存被禁止 : [ N. Q% g/ |& T7 e7 ^ 读输入数据期存器, 读到的值为0 3 b7 f1 m- l+ P: e) d5 J; Q8 N 注意:IO配置成模拟输入时,不能容忍5V电压9 W& b a# ^4 d; i' J- u+ o7 o + p6 M# Z& A4 [# ] 1.4、复用输出; h7 x( N, F# T! S) Z 复用输出框图; j7 F+ |* [6 S( O0 D2 O 输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的7 I% m' C/ k3 A }& S% ^; j1 R; y9 \ 由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出 V9 h/ M+ D" h# ]% o 上拉电阻和下拉电阻使能,可以进行配置/ z" }9 s. k P' }1 b TTL施密特触发器使能 可以通过读输入数据寄存器, 可以得到 I/O 的状态 02、管脚复用和重映射 管脚复用和重映射(其实是一回事),STMF10X系列叫重映射,STMF20X系列叫管脚复用,也就是复用功能2 d3 [/ w m$ Z3 h$ ?; s 2.1、STMF10X系列 STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。1 r4 V. W. h1 a8 y. D - d! r4 e7 }: J/ _( s2 V& I4 Z. [ 4 o& n8 c" P6 s, ^ STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示: 8 C5 a( _/ k5 N 1.打开重映射时钟和USART重映射后的I/O口引脚时钟, b- [% _2 g9 X1 o, ?( f
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);& l, e+ U) c6 _* P/ U 3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。6 v7 q6 H, j6 p- o" O- l% h: J
# G9 n7 t% v; G- r. s/ F 备注:要先配置GPIO为复用功能,再调用复用的库函数 R) K9 L# E! {) m+ `9 d GPIO模式名字解释$ M: N: P. L3 o0 A9 h
推挽输出; u, ^/ J, r2 N B % e* s3 |7 A* U 可以输出强高低电平,连接数字器件。 0 q# i4 |& u, M9 i6 M0 j! k # a' j0 N) ]+ A$ u( A6 i& E! o6 P1 o 开漏输出! `9 n! G7 n! c3 H5 T% V; n 2 Y* `: q! w0 V X 只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内)4 o4 H7 C1 G4 D7 ?' k& _! @ ( _/ U1 a# m' W' T! i) Y; R c3 w 1 s: }# N4 v4 `% \! z 高阻态 ! a8 z' K% m0 S0 H 高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。; Y1 a' Y8 v1 _) |& A1 l * ~7 J, _9 _* G+ y& V 8 X; P9 j' ^5 n4 N3 J * V& Y! G1 Y+ x7 {* R 7 E/ r" O! W0 K/ c2 u( F9 `' S. n - `3 z$ ~# o9 W |
ST25 + STSAFE 助力IOT应用创新
STM32 NFC驱动开发
ST25R3920B 汽车NFC读卡器
用于CCC数字钥匙和汽车中控台的汽车级高性能NFC读卡器
[中秋活动]使用STM32L552驱动25R3916C操作NFC
技术文| 如何使用J-Link烧录SPI Flash
STM32四种库对比:寄存器、标准外设库、HAL、LL-51
使用STM32CubeMX结合MC Workbench生成FOC代码
技术小课堂| 如何使用J-Link烧录SPI Flash
STM32H743跑分