当前位置: 首页 > news >正文

单片机基础知识 -- 普通推挽和复用推挽模式

STM32单片机中复用推挽模式普通推挽模式的核心区别,这是理解STM32引脚配置的关键知识点,尤其在使用外设功能时特别重要。

核心区别解析

首先,我们先明确两个模式的本质定义,再对比核心差异:

1. 普通推挽模式(通用输出推挽)
  • 控制源:引脚的电平由CPU内核/寄存器(GPIOx_ODR)直接控制。你通过代码向GPIO输出数据寄存器写入0或1,就能直接决定引脚输出高电平(VDD)或低电平(GND)。
  • 功能定位:仅作为通用IO口使用,比如控制LED亮灭、驱动继电器、输出简单的高低电平信号等。
  • 示例场景GPIO_SetBits(GPIOA, GPIO_Pin_0);直接让PA0输出高电平。
2. 复用推挽模式(Alternate Function Push-Pull)
  • 控制源:引脚的电平不由CPU直接控制,而是由片上外设(如USART、SPI、TIM、I2C等)接管。CPU只是配置外设工作,外设自动驱动引脚输出对应的电平。
  • 功能定位:引脚作为外设功能引脚使用,比如USART的TX引脚、TIM的PWM输出引脚、SPI的MOSI引脚等。
  • 示例场景:PA9配置为USART1_TX的复用推挽模式后,CPU只需向USART1的数据寄存器写入字符,USART1外设会自动在PA9上输出对应的串口电平,无需CPU手动控制PA9的高低电平。
直观对比表
特性普通推挽模式复用推挽模式
控制主体CPU内核(GPIO寄存器)片上外设(USART/TIM/SPI等)
核心用途通用IO输出外设功能输出
电平触发方式软件写GPIO_ODR寄存器外设硬件自动生成
典型应用LED控制、普通电平输出串口TX、PWM输出、SPI输出

代码示例(直观理解配置差异)

以STM32F103为例,分别展示两种模式的配置代码:

普通推挽模式配置(PA0作为通用输出)
#include"stm32f10x.h"voidGPIO_Common_PushPull_Config(void){GPIO_InitTypeDef GPIO_InitStruct;// 使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// 配置PA0为普通推挽输出,速度50MHzGPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;// 普通推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);// 手动控制电平(CPU直接操作)GPIO_SetBits(GPIOA,GPIO_Pin_0);// 输出高GPIO_ResetBits(GPIOA,GPIO_Pin_0);// 输出低}
复用推挽模式配置(PA9作为USART1_TX)
#include"stm32f10x.h"voidGPIO_AF_PushPull_Config(void){GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;// 1. 使能时钟:GPIOA + USART1RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);// 2. 配置PA9为复用推挽输出(USART1_TX)GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;// 复用推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);// 3. 配置USART1(外设接管引脚)USART_InitStruct.USART_BaudRate=9600;USART_InitStruct.USART_WordLength=USART_WordLength_8b;USART_InitStruct.USART_StopBits=USART_StopBits_1;USART_InitStruct.USART_Parity=USART_Parity_No;USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode=USART_Mode_Tx;// 仅发送USART_Init(USART1,&USART_InitStruct);// 4. 使能USART1USART_Cmd(USART1,ENABLE);// 5. 发送数据(外设驱动引脚,CPU无需操作GPIO)USART_SendData(USART1,'A');// USART1自动在PA9输出对应电平}

总结

  1. 控制主体不同:普通推挽由CPU直接控制GPIO寄存器,复用推挽由外设(如USART/TIM)接管引脚控制权。
  2. 使用场景不同:普通推挽用于通用IO输出,复用推挽用于外设功能输出(串口、PWM、SPI等)。
  3. 操作方式不同:普通推挽通过GPIO_SetBits/ResetBits控制电平,复用推挽只需配置外设,由外设自动驱动引脚。

简单来说,复用推挽模式就是“把引脚的控制权交给外设”,而普通推挽模式是“CPU自己直接控制引脚”,这是两者最核心的区别。

http://www.jsqmd.com/news/418244/

相关文章:

  • 大数据领域Kafka的消息队列容量规划
  • Python基于Vue的软件产品展示销售系统 django flask pycharm
  • Dify搭建Agent
  • P1012 [NOIP 1998 提高组] 拼数题解
  • Qt 的 .ui (XML) 文件和 WPF 的 .xaml (XML) 文件
  • CompletableFuture 完全指南:定义、使用、场景与实战
  • 深度学习--卷积神经网络之迁移学习ResNet
  • MSYS 环境下 GCC 启用本地化支持
  • Python基于Vue的游戏创意工坊与推广平台的设计与实现 django flask pycharm
  • AI原生应用领域多轮对话在游戏中的创新玩法设计
  • ‌2026年软件测试热度制高点:KubeVirt混合快照管理的实战指南
  • Python基于Vue的甜品店管理系统 django flask pycharm
  • 深度学习--卷积神经网络之调整学习率
  • go基础之逻辑运算与条件判断(中)
  • WPF 的 DPI 机制
  • AI Agent框架探秘:拆解 OpenHands(9)--- AgentController
  • 《白色相簿2》《一泊二日の凯旋》听后感
  • Windows 下 DPI 渲染
  • 一文看透!AI应用架构师在智能金融系统设计的策略布局
  • 一天一个开源项目(第35篇):GitHub Store - 跨平台的 GitHub Releases 应用商店
  • 开工有礼!获悉Bonree ONE新动态,申请试用领“小睿”新周边!
  • python基于 flask 的流浪动物收养系统设计与开发-vue pycharm django
  • 电脑蓝屏故障与swkb.sys文件问题的解决指南
  • [豪の算法奇妙冒险] 代码随想录算法训练营第四十八天 | 739-每日温度、496-下一个更大元素Ⅰ、503-下一个更大元素Ⅱ
  • 告别JSON!Anthropic发布Tool Calling 2.0,Agent上下文消耗骤降80%
  • 【PowerBI专栏】PowerBI的数据保留与删除操作
  • 杭州脱发自救指南:植发还是纹发?看这篇就懂! - 品牌测评鉴赏家
  • 杭州植发机构大揭秘:脱发星人的逆袭指南 - 品牌测评鉴赏家
  • 【数据分析】python探究云量变化对植被生产力的影响
  • 2026年专业深度测评:中国排名前5的geo优化公司权威榜单 - 电商资讯