
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 01、I/O接口电路 带FT的是说明可以容忍5V电压的,I/O电路框图& x4 b" \/ o, W% K& `* w# u8 Q) c6 I ![]() 普通输入模式下,上拉和下拉电阻(微弱)的存在,共分3种模式$ ?+ y- q7 y- S$ w$ }% e# | 1、浮空输入,不使能上拉电阻,不使能下拉电阻* \' f- u$ I2 ]1 O1 H+ C. `! m 2、上拉输入,使能上拉电阻: E# g T# b) n+ d 3、下拉输入,使能下拉电阻9 Q+ a% l+ `. R' s ![]() 1.2、普通输出1 x) B( u% T( y# s' E 普通输入模式下,上拉和下拉电阻(微弱)的存在。主要是由于P-MOS和N-MOS的存在分为下列两种模式 . 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 ![]() 5 \, ?( v. u2 r1 T" { 4 w- w% i0 O: N 1、在普通输出模式中,TTL施密特触发器是打开的,所以读输入数据寄存器,可以得到 I/O 的状态。 2、驱动GPIO输出,我们可以采用输出寄存器也可以使用位段 1.3、模拟输入$ c2 H2 G. i( \: z$ e8 d, O 模拟输入上拉电阻和下拉电阻是没有用的. H* ]: x3 E' y0 Y! b& X 高阻态下模拟输入 ![]() 弱上拉和下拉电阻禁止- y3 [% q/ B7 ?3 ?7 P7 w & E4 ^9 l: P0 z; { N& ~& x- t 施密特触发器停用,施密特触发器输出值强制为03 L, u# }7 F, ~- v* j5 j5 N \ 输出缓存被禁止 读输入数据期存器, 读到的值为0. ~/ d- F" J7 l 3 @& x( D! ^% k) @6 ]' n ( B& t6 g/ I+ C4 @: f 注意:IO配置成模拟输入时,不能容忍5V电压 1.4、复用输出3 C: a$ @3 h4 I3 i3 O 复用输出框图 ![]() + m2 C2 P$ p% L: v8 X$ |( w ' h3 [2 q5 M& O1 s6 b 输出缓存被来自外设的信号驱动(发送数据器使能和数据),也即是位设置/清除寄存器和输出数据寄存器在这里是无用的 3 M/ ^% I6 m9 N- k 由于P-MOS和N-MOS使能,仍然可以配置成推挽输出和开漏输出 & L7 _ G+ x- I( C3 F 3 T7 A# p) j3 X4 |& f, c 上拉电阻和下拉电阻使能,可以进行配置; t6 q, B; d' M9 ^3 b- _ & t5 I" f) n1 g X& p1 [ TTL施密特触发器使能 可以通过读输入数据寄存器, 可以得到 I/O 的状态 02、管脚复用和重映射. 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系列 STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。3 x# p/ b' I3 ~2 s- a' P1 ^ ![]() 4 v! _3 F/ F' W# A& Z STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:& `* C* g9 Q* Q ![]() 1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); 3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.
STMF20X系列(包括之后的40系列)是没有重映射的说法,只有统一的称为复用功能。3 d+ |, q8 r6 s, ]- @, K ![]()
![]() 备注:要先配置GPIO为复用功能,再调用复用的库函数 ![]() GPIO模式名字解释, L, ~ D8 s9 L0 W v& o ![]()
, p4 m8 f( T, E; `3 A9 x 推挽输出. F n" Y8 g- F! p 4 s9 J# O/ k& ` ?) t, z- K/ f 可以输出强高低电平,连接数字器件。. f. Y# {2 m7 R+ Q0 L4 P # A2 [# X& U' ] 开漏输出6 k6 ?& B- M! u" d1 R4 w0 i; s 7 y" U1 T# ?7 M, f; @: r 只可以输出强低电平,高电平需要外部电阻拉高,输出端相当于三极管的集电极,要得到高电平,需要上拉电阻,适合做电流型的驱动,其吸收电流negligence相对强(一般20ma以内) i6 m# r$ g3 c/ s! h8 _ ; q- C' r9 l" p: M. a4 X& f. L# n, `- Y 高阻态 5 q& [8 J5 U- Q2 a2 e 高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。如果设置为浮空输入,也就是既没有上拉电阻,没有下拉电阻。可以认为是高阻态。 * n! W+ B# c1 h; i # w- \- b; ^5 W+ g; B. H 3 [' P+ H2 c* c: Y5 Z8 }# _+ u 4 v `# ^" c1 S. o# `, O7 I |
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跑分