关于STM32八种输入输出模式详细解析_stm32io口8种模式
⏩ 大家好哇!我是戈林,一名嵌入式爱好者。
⏩ 非常感谢大家的阅读,如果有不对的地方欢迎指正。
⏩ 加入戈林嵌入式交流群(QQ群号:1054325713),免费获取博主所有资料哦!
八种输入输出模式,共分为四大类:
输入模式:浮空输入(Floating Input),上拉输入(Pull-up Input),下拉输入(Pull-down Input)
输出模式:推挽输出(Push-pull Output),开漏输出(Open-drain Output)
复用功能模式:复用推挽输出(Alternate Function Push-pull),复用开漏输出(Alternate Function Open-drain)
模拟模式(Analog),模拟输入/输出(Analog)
了解完四大类以后,开始详细解析STM32的八种输入输出模式。
一、输入模式(Input)
-
浮空输入(Floating Input)
-
特点:IO口不接上拉也不接下拉,输入状态完全由外部电路决定,容易受干扰。
-
应用:外部有明确电平驱动时使用。
-
-
上拉输入(Pull-up Input)
-
特点:内部接上拉电阻,默认输入高电平,外部拉低时为低。
-
应用:按键输入、开漏输出读取等。
-
-
下拉输入(Pull-down Input)
-
特点:内部接下拉电阻,默认输入低电平,外部拉高时为高。
-
应用:按键输入、开漏输出读取等。
-
二、输出模式(Output)
-
推挽输出(Push-pull Output)
-
特点:IO口可输出高低电平,驱动能力强,能直接驱动LED等负载。
-
应用:普通数字输出、LED、继电器等。
-
-
开漏输出(Open-drain Output)
-
特点:只能输出低电平或高阻态,需外部上拉电阻才能输出高电平。
-
应用:I2C总线、多个IO口并联输出等。
-
三、复用功能模式(Alternate Function)
-
复用推挽输出(Alternate Function Push-pull)
-
特点:IO口作为外设(如USART、SPI等)功能输出,推挽结构。
-
应用:串口、SPI、定时器PWM等外设输出。
-
-
复用开漏输出(Alternate Function Open-drain)
-
特点:IO口作为外设功能输出,开漏结构,需外部上拉。
-
应用:I2C总线、部分特殊外设。
-
四、模拟模式(Analog)
-
模拟输入/输出(Analog)
-
特点:IO口与模拟电路(如ADC、DAC)连接,数字输入输出功能关闭,功耗最低。
-
应用:ADC采样、DAC输出、未用IO口降功耗。
-
总结表格
说明:X表示该位无关,XX表示该寄存器对该模式无影响。
典型代码示例
// 浮空输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //配置为浮空输入// 上拉输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //配置为上拉输入// 下拉输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //配置为下拉输入// 推挽输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置为推挽输出// 开漏输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //配置为开漏输出// 复用推挽输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //配置为复用推挽输出// 复用开漏输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //配置为复用开漏输出// 模拟输入/输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //配置为模拟输入/输出