电子产业一站式赋能平台

PCB联盟网

搜索
查看: 124|回复: 0
收起左侧

STM32中,推挽输出和复用推挽输出的区别

[复制链接]

839

主题

839

帖子

7828

积分

高级会员

Rank: 5Rank: 5

积分
7828
发表于 2025-3-21 07:30:00 | 显示全部楼层 |阅读模式

kbwltiohw5w640905021.gif

kbwltiohw5w640905021.gif
# O( U, X. K+ n' V4 A7 Y# y( J& }3 v- i
在STM32中,推挽输出(Push-Pull Output)复用推挽输出(Alternate Function Push-Pull)是GPIO的两种工作模式,它们的核心区别在于引脚的用途和控制权" q. m/ R% i6 [/ n5 `
1. 推挽输出(Push-Pull Output)
  • 用途:通用GPIO输出模式,由用户直接控制引脚电平。
  • 控制权:用户通过操作GPIO的输出数据寄存器(如GPIOx_ODR)控制高低电平。
  • 配置方式:GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
  • 特点
  • 引脚可以主动输出高电平(上拉PMOS导通)或低电平(下拉NMOS导通)。
  • 驱动能力强,适合驱动LED、继电器等外设。
  • 用户需手动操作GPIO寄存器(如HAL_GPIO_WritePin())。2. 复用推挽输出(Alternate Function Push-Pull)
  • 用途:将引脚分配给特定外设(如SPI、I2C、UART等),由外设硬件自动控制。
  • 控制权:外设模块(如USART、TIMER)自动控制引脚电平,用户无需手动操作GPIO。
  • 配置方式:GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;       // 复用推挽模式
    ) i" q* F% b6 E+ v1 ?4 \, ?% zGPIO_InitStruct.Alternate = GPIO_AFx_USART1; // 选择复用功能(如USART1)
  • 特点
  • 引脚电平由外设硬件自动生成(如UART发送数据时自动输出高低电平)。
  • 用户需配置外设参数(如波特率、时钟频率),而非直接操作GPIO。
  • 必须与对应的外设功能绑定(如PA9映射为USART1_TX)。核心区别总结特性推挽输出(Push-Pull)复用推挽输出(Alternate Function Push-Pull)控制权用户通过代码直接控制由外设硬件自动控制(如USART、SPI)应用场景通用IO控制(LED、按键等)外设通信(UART发送、SPI时钟信号等)配置重点设置GPIO为输出模式绑定复用功能和外设参数(Alternate Function)代码操作HAL_GPIO_WritePin()外设初始化(如HAL_UART_Init())示例场景
  • 推挽输出
    , s2 S6 j7 Z' q7 Y3 D/ g' `控制LED闪烁:" l, c0 G( r$ h2 [) D6 u& i& V% ]9 j4 H
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // PA5输出高电平
  • 复用推挽输出- l& {  E$ p8 N' [- ^7 D
    配置USART1发送数据(PA9为USART1_TX):" c; x& P/ d) [2 \- R0 c
    // 初始化GPIO为复用推挽模式
    ; Y+ ]1 U- h% y/ o( b: @GPIO_InitStruct.Pin = GPIO_PIN_9;
    / k5 s* R! W! }0 U8 nGPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  b" @. p' ^2 L" D
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1; // 绑定USART1功能
    : Z$ e) H0 |" I; U0 A$ G# V8 @// 初始化USART外设( i5 D: v- g; K; o
    HAL_UART_Transmit(&huart1, data, len, timeout); // 数据由硬件自动发送. j+ z9 R/ {  b! A, F" z/ `7 d
    [/ol]常见问题
  • 复用推挽是否需要使能外设时钟?
    7 d) o) ]/ V/ ~是的!需同时使能GPIO和外设的时钟(如__HAL_RCC_USART1_CLK_ENABLE())。
  • 推挽和开漏输出的区别?) K$ E" d) n8 o( i
    推挽可输出高/低电平,开漏(Open-Drain)只能输出低电平或高阻态,需外部上拉电阻。
  • 如何查找引脚的复用功能?2 W6 H4 \& y: I9 j6 G: Y# m
    参考STM32芯片数据手册的Alternate Function Mapping表格。
    3 I; S- h9 Y8 J* Q1 @[/ol] ) d5 C5 ~- M( b) h8 f. [
    声明:
    ( {% P- O* ^1 H4 M, ?% u本文转载自Passion嵌入式公众号,如涉及作品内容、版权和其它问题,请联系工作人员微(13237418207),我们将在第一时间和您对接删除处理!投稿/招聘/广告/课程合作/资源置换请加微信:13237418207% [5 Y: y) L$ R$ s; h4 C2 E& u

    ) ?2 f9 n9 v, r

    mprms23pkan640905121.jpg

    mprms23pkan640905121.jpg
    ' J) j% b. R  `4 G6 G, g, q
    【初学者必备】50份pcb设计DFM可制造性分析资料
    8 r7 C. X( L; e' v  J! N0 K$ f  q+ ]9 {

    jr1btygci4p640905221.jpg

    jr1btygci4p640905221.jpg

    0 L; j. c, k) E  O阻抗、电抗、容抗和感抗的区别和联系,你真的懂吗?, H$ s5 U' h- A) J; r) y0 b

    " p* T: e% G: X) T% f

    ill1xvyv0dh640905321.jpg

    ill1xvyv0dh640905321.jpg

    $ D2 o' _) P+ m# w7个维度解析电源损耗:同步Buck,为何Vin越小,电源效率越高?
    5 v0 R  [1 ^$ ^' w3 A  p0 {# k2 d4 a% Z6 l2 f
    5 M2 R7 U3 q3 v& l1 I) R1 R
    . U% [# m1 Q5 X; }

    j1ji4kmr5c5640905421.png

    j1ji4kmr5c5640905421.png
    : [5 d4 m) z. Y; {4 O% n
    扫码添加客服微信,备注“入群”拉您进凡亿教育官方专属技术微信群,与众位电子技术大神一起交流技术问题及心得~7 `9 k/ p+ K; ~) d5 U! J
    分享 点赞 在看?? “三连”支持!
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表