STM32GPIO的八大模式详解

STM32GPIO的八大模式详解

介绍


什么是STM32 GPIO?

STM32 GPIO是一组通用输入/输出端口,用于连接外部设备、传感器、显示器、LED等。每个GPIO引脚可以配置为输入或输出,并且可以通过寄存器进行控制。
5 V 容忍 I/O 端口位的基本结构
STM32GPIO的八大模式详解_第1张图片

STM32 GPIO的八种模式

输入模式:

  1. GPIO_Mode_AIN(模拟输入)
    STM32GPIO的八大模式详解_第2张图片

    • 用于ADC采集电压的输入通道。
    • 信号不经过施密特触发器,直接进入ADC模块。
  2. GPIO_Mode_IN_FLOATING(浮空输入)
    STM32GPIO的八大模式详解_第3张图片

    • I/O端口的电平信号直接进入输入数据寄存器。
    • I/O的电平状态是不确定的,完全由外部输入决定。
  3. GPIO_Mode_IPD(下拉输入)
    STM32GPIO的八大模式详解_第4张图片

    • IO内部接下拉电阻。
    • 如果IO口外部没有信号输入或者引脚悬空,IO口默认为低电平。
  4. GPIO_Mode_IPU(上拉输入)
    STM32GPIO的八大模式详解_第5张图片

    • IO内部接上拉电阻。
    • 如果IO口外部没有信号输入或者引脚悬空,IO口默认为高电平。

输出模式:

  1. GPIO_Mode_Out_OD(开漏输出)
    STM32GPIO的八大模式详解_第6张图片

    • 只有N-MOS管工作。
    • 输出低电平时N-MOS管导通,输出高电平时N-MOS管关闭。
    • 输出指令不起作用,I/O端口的电平由外部上拉或者下拉决定。
  2. GPIO_Mode_Out_PP(推挽输出)
    STM32GPIO的八大模式详解_第7张图片

    • N-MOS管和P-MOS管都工作。
    • 输出低电平时P-MOS管关闭,N-MOS管导通;输出高电平时P-MOS管导通,N-MOS管关闭。
    • I/O端口的电平与输出指令一致。
  3. GPIO_Mode_AF_OD(复用开漏输出)
    STM32GPIO的八大模式详解_第8张图片

    • GPIO复用为其他外设。
    • 输出的高低电平的来源于其它外设。
  4. GPIO_Mode_AF_PP(复用推挽输出)
    STM32GPIO的八大模式详解_第9张图片

    • GPIO复用为其他外设。
    • 输出的高低电平的来源于其它外设。

API

使用HAL库配置STM32 GPIO的八种模式

  1. 输入模式 (Input mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 输出模式 (Output mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 选择适当的速度
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 复用功能模式 (Alternate function mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 选择适当的速度
GPIO_InitStruct.Alternate = GPIO_AF1_USART2; // 选择适当的复用功能
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 模拟模式 (Analog mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 推挽输出模式 (Push-pull output mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 开漏输出模式 (Open-drain output mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; // 开漏输出模式
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 复用推挽输出模式 (Alternate function push-pull output mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出模式
GPIO_InitStruct.Alternate = GPIO_AF1_USART2; // 选择适当的复用功能
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
  1. 复用开漏输出模式 (Alternate function open-drain output mode):
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择相应的引脚
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 复用开漏输出模式
GPIO_InitStruct.Alternate = GPIO_AF1_USART2; // 选择适当的复用功能
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA

总结

STM32 GPIO的八种模式提供了灵活性和可定制性,使我们能够根据应用需求配置不同的引脚功能。在实际项目中,根据具体的外设连接和信号处理要求,选择合适的GPIO模式非常重要。

你可能感兴趣的:(STM32-hal库,stm32,单片机,嵌入式硬件)