STM32 GPIO模式详解及其应用场景全面总结
GPIO(通用输入/输出)在 STM32 微控制器中有多种输入和输出模式,每种模式适用于不同的场合。以下是常见的 GPIO 输入输出模式及其应用场景的总结:
一. 输入模式
1、浮空输入模式(GPIO_Mode_IN_FLOATING)
应用场合:
串口通信(如 UART、USART)中的 RX 引脚:适用于接收端输入,由外部设备控制电平变化。
外部传感器信号输入:如霍尔传感器、红外传感器、光电开关,信号电平由传感器提供。
外部中断信号输入:如设置为外部中断的引脚,外部设备生成中断信号时检测电平变化。
数字输入信号检测:如外部设备输出的数字信号(0 或 1),用于数字信号传输与检测。
2、上拉输入模式(GPIO_Mode_IPU)
应用场合:
按键输入:适用于机械按键或拨动开关,未按下时内部上拉电阻将输入保持为高电平,按下时接地为低电平。
IIC 通信 SDA 引脚:IIC 通信中的数据线需要保持默认高电平,以确保总线上的数据传输正常。
SPI 通信中的从设备选择引脚(NSS):通常在无信号输入时保持高电平,当主设备选择时拉低电平以激活从设备。
开关量信号输入:如继电器状态检测、逻辑电平信号输入,未触发时输入保持为高电平。
电源检测引脚:检测电源状态,如上拉至高电平检测到正常供电,掉电时检测低电平。
3、下拉输入模式(GPIO_Mode_IPD)
应用场合:
CAN_RX 引脚:接收 CAN 总线上的信号,默认低电平,用于确保总线没有信号时引脚处于稳定低电平状态。
按键输入:用于按钮接地触发的电路设计,按钮未按下时通过内部下拉电阻保持低电平。
数字电路信号输入:如默认电平为低的信号输入,确保未连接时输入稳定在低电平。
光电开关或其他开关量传感器输入:用于下拉电阻保持低电平的状态,当检测到信号时由外部信号拉高。
外部设备低电平状态检测:适用于需要默认检测低电平信号的电路设计。
4、模拟输入模式(GPIO_Mode_AIN)
应用场合:
ADC 模拟信号采集:用于采集来自传感器的模拟信号,如温度传感器、电压传感器、光敏传感器等模拟量信号。
电池电压检测:通过 ADC 采集电池电压,用于电源管理。
光强检测:使用光敏传感器,将光信号转为电压信号输入 ADC 进行测量。
电流检测:通过分流电阻和运算放大器采集电流信号,转换为电压信号输入 ADC。
湿度、气压等环境监测传感器:如温湿度传感器、气压传感器的模拟信号输入。
一、 输出模式
1、推挽输出模式(GPIO_Mode_Out_PP)
应用场合:
LED 驱动:用于控制 LED 灯的亮灭,推挽模式能够提供足够的电流驱动 LED。
蜂鸣器驱动:控制蜂鸣器的开关,提供稳定的高低电平以驱动蜂鸣器发声。
继电器控制:用于控制继电器的开关,通过推挽输出提供驱动电流。
电机控制:用于驱动小型直流电机,通过高低电平控制电机启动和停止。
数据传输引脚:用于一些需要提供强电平信号的总线通信,如 SPI 通信中的 SCK、MOSI、MISO 引脚。
状态指示灯控制:用于控制各种状态指示灯,如电源指示灯、故障指示灯、通信指示灯。
2、开漏输出模式(GPIO_Mode_Out_OD)
应用场合:
IIC 通信 SCL 和 SDA 引脚:IIC 总线上的数据线和时钟线均采用开漏输出模式,通过外部上拉电阻进行数据线状态控制。
多设备通信总线:如在一条总线上有多个设备时,开漏输出可以避免信号冲突,允许多个设备共享一条数据线。
GPIO 中断信号输出:一些外部设备需要发送中断信号到 MCU,使用开漏模式可通过外部上拉电阻共享中断信号线。
电源管理:用于切换不同电压域的控制电路,开漏输出允许在不同电压域之间进行兼容。
电平转换:通过外部上拉电阻适配不同电压电平的器件,例如 5V 与 3.3V 设备通信时。
3、复用功能推挽输出模式(GPIO_Mode_AF_PP)
应用场合:
UART 通信 TX 引脚:用于 UART 串口通信的发送端,通过复用功能进行推挽输出。
SPI 通信:如 SCK(时钟线)、MOSI(主输出从输入)、MISO(主输入从输出)引脚。
CAN 通信 TX 引脚:用于 CAN 总线通信中的发送端,推挽模式能够提供稳定的驱动电流。
PWM 信号输出:用于伺服电机或 DC 电机的控制,生成精确的 PWM 信号输出。
外设控制信号:如控制外部设备的时钟、使能信号,推挽模式提供稳定的高低电平切换。
4、复用功能开漏输出模式(GPIO_Mode_AF_OD)
应用场合:
IIC 通信 SDA 和 SCL 引脚:总线上多个设备共享数据和时钟线,开漏模式确保信号安全传输。
SMBus 通信:用于类似 IIC 的总线通信协议,多个设备共用数据线和时钟线。
1-Wire 通信:开漏输出用于单总线通信协议的总线数据传输,支持多设备共用一根数据线。
外部设备中断信号线:用于 MCU 接收来自多个外设的中断信号,确保不会发生电平冲突。
电源管理信号:控制电压域的转换器,通过开漏输出控制电源开关和设备使能。
作者:没道理hhhhh