打印
[STM32F1]

STM32的IO口的8种配置详解

[复制链接]
809|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
louliana|  楼主 | 2024-7-26 08:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 STM32 IO口的8中配置方式解读(推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟)

  STM32 IO口的8中配置方式:
  (1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入

  (3)GPIO_Mode_IPD 下拉输入

  (4)GPIO_Mode_IPU 上拉输入

  (5)GPIO_Mode_Out_OD 开漏输出

  (6)GPIO_Mode_Out_PP 推挽输出

  (7)GPIO_Mode_AF_OD 复用开漏输出

  (8)GPIO_Mode_AF_PP 复用推挽输出

  I/O口的输出模式下。有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户能够依据自己的须要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块。达到最佳的噪声 控制和减少功耗的目的。

  高频的驱动电路。噪声也高,当不须要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

  当然假设要输出较高频率的信号,但却选用了较低频率的驱动模块。非常可能会得到失真的输出信号。

  关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)比方:

  1 、对于串口,假如最大波特率仅仅需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

  2 、对于I2C接口。假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度也许不够,这时能够选用10M的GPIO引脚速度。

  3、 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了。须要选用50M的GPIO的引脚速度。

  4、 GPIO口设为输入时。输出驱动电路与port是断开。所以输出速度配置无意义。

  5、在复位期间和刚复位后,复用功能未开启,I/Oport被配置成浮空输入模式。

  6、全部port都有外部中断能力。为了使用外部中断线,port必须配置成输入模式。

  7、GPIO口的配置具有上锁功能,当配置好GPIO口后,能够通过程序锁住配置组合,直到下次芯片复位才干解锁。

  8 、在STM32中怎样配置片内外设使用的IOport

  首先,一个外设经过 ①配置输入的时钟和 ②初始化后即被激活(开启);③假设使用该外设的输入输出管脚,则须要配置相应的GPIOport(否则该外设相应的输入输出管脚能够做普通GPIO管脚使用);④再对外设进行具体配置。

  相应到外设的输入输出功能有下述三种情况:
  一、外设相应的管脚为输出:须要依据外围电路的配置选择相应的管脚为复用功能的推挽输出或复用功能的开漏输出。

  二、外设相应的管脚为输入:则依据外围电路的配置能够选择浮空输入、带上拉输入或带下拉输入。

  三、ADC相应的管脚:配置管脚为模拟输入。

  假设把port配置成复用输出功能。则引脚和输出寄存器断开。并和片上外设的输出信号连接。将管脚配置成复用输出功能后,假设外设没有被激活,那么它的输出将不确定。

  3 通用IOport(GPIO)初始化:

  1 )GPIO初始化

  1、 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2总线外设时钟

  2、 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放GPIO复位

  2) 配置各个PINport(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_IPU、输入下拉_IPD、开漏输出_OUT_OD、推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)

  3) GPIO初始化完毕

  推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

  推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

使用特权

评论回复
沙发
Bowclad| | 2024-7-26 10:19 | 只看该作者
不同的配置模式对应什么区别啊

使用特权

评论回复
板凳
慢动作| | 2024-7-27 15:09 | 只看该作者
在复位期间和刚复位后,复用功能未开启,I/Oport被配置成浮空输入模式。

使用特权

评论回复
地板
LOVEEVER| | 2024-7-28 11:29 | 只看该作者
推拉式输出级既提高电路的负载能力,又提高开关速度。

使用特权

评论回复
5
无法去污粉| | 2024-7-30 12:10 | 只看该作者
假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了。

使用特权

评论回复
6
4c1l| | 2024-8-31 22:57 | 只看该作者
将 GPIO 设置为模拟模式以确保引脚不会接收到数字信号干扰,并且模拟信号可以准确地传递给内部 ADC。

使用特权

评论回复
7
公羊子丹| | 2024-9-21 07:53 | 只看该作者
推挽输出就是能输出高、低电平,挺常见的。适合驱动一些简单的东西,比如LED。它还能推拉电流,驱动能力不错,玩STM32的都挺爱用。

使用特权

评论回复
8
童雨竹| | 2024-9-21 07:54 | 只看该作者
I2C这种总线式通信就喜欢复用开漏输出,因为它能让多个设备一起用同一条线,还不会互相干扰,避免信号冲突,真是为总线通信设计的好东西。

使用特权

评论回复
9
周半梅| | 2024-9-21 07:54 | 只看该作者
浮空输入模式没有上拉、下拉电阻,所以容易受干扰。环境干净的话用着还行,但如果干扰多,这个模式就不太靠谱,容易跑出错误信号。

使用特权

评论回复
10
帛灿灿| | 2024-9-21 07:55 | 只看该作者
想要搞串口通信时,用复用推挽输出准没错。它能让外设控制信号的输出速度,数据传输也快,不用担心信号质量。

使用特权

评论回复
11
万图| | 2024-9-21 07:55 | 只看该作者
开漏输出特别适合跟外部设备打交道,尤其是电平不同的情况,外面挂个上拉电阻就能搞定信号转换,实用性很强。

使用特权

评论回复
12
Wordsworth| | 2024-9-21 07:56 | 只看该作者
模拟输入就是给ADC模块用的,比如传感器输入模拟信号。设置成这个模式后,电压变化能直接被读进ADC里,很方便。

使用特权

评论回复
13
Pulitzer| | 2024-9-21 07:56 | 只看该作者
上拉输入模式特别适合用在按键上,按键没按时是高电平,按下去就拉低电平,用起来简单直观,按键检测就靠它了。

使用特权

评论回复
14
Bblythe| | 2024-9-21 07:57 | 只看该作者
要控制LED,推挽输出简直太方便了。输出高电平亮,低电平灭。还能提供足够的电流驱动,稳定又好用。

使用特权

评论回复
15
Uriah| | 2024-9-21 07:57 | 只看该作者
当你需要中断处理时,用复用输出模式挺好。这样外设的信号能直接触发中断,响应速度快,效率也高。

使用特权

评论回复
16
Clyde011| | 2024-9-21 07:58 | 只看该作者
配GPIO时,选择合适的输出速度还能省电。比如不用高速信号时选2MHz就行了,不仅省电,还能减少噪声,效果不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

1282

帖子

1

粉丝