概述
在STM32或者GD32中,普通的输出GPIO输出方式主要是开漏输出和推挽输出,下面我们开始讲解这2种模式的区别。
下图是GPIO内部的结构示意图。
在上图中,P-MOS带了一个⚪,说明是低电平导通。
上图是GPIO的示意图,有输入和输出,如果简化为输出,则如下所示。
模拟文件下载
https://download.csdn.net/download/qq_24312945/85250172
推挽输出
推挽输出的内部电路大概是下图这个样子,由一个P-MOS和一个N-MOS组合而成,同一时间只有一个管子能够进行导通。
当输出高电平时候,P-MOS导通,N-MOS截至,此时电源电流入R5。
当输出低电平时候,N-MOS导通,P-MOS截至,此时电流流入R5的为0。
线与
推挽输出高电平与电源电压基本上没有压差 高低电平的驱动能力较强,推挽输出的电流都能达到几十mA。 但是无法进行线与操作,做进行线与操作,那么电源和地就会短路,因为mos管电阻很小。 看下图可以得知,电流通过Q3的P-MOS流到Q2的N-MOS,最终回到地。
开漏输出
开漏输出又叫漏极开漏输出简化后可以看作如下的示意图。
若还是使用上面推挽的电路图,当N-MOS为低电平时候,那么他的输出就是一个高阻态。 可以看到,R5没有电流通过,电压也是接近于0,所以GPIO无法对外输出高电平。
此时需要增加一个上拉,这样的话上拉的电流就会流出去。 所以在开漏输出情况下,需要增加一个上拉才能进行输出高电平。
对于输出低电平,他和推挽输出差不多,电流通过N-MOS流到地中。
上图是没有增加上拉,但是开漏输出模式都需要增加,增加上拉之后如下图所示。 电流通过N-MOS流回地中。
输出电压
由于推挽输出在输出的时候是通过单片机内部的电压,所以他的电压是不能改变的。 但是开漏输出是通过外部上拉的电压,所以可以改变开漏输出模式下的电压大小。 下图是当上拉为5V时候,也是可以驱动出去的,这个上拉电压最大值需要看单片机的耐压。
关键字:开漏输出 推挽输出 STM32
引用地址:
开漏输出和推挽输出
推荐阅读最新更新时间:2024-11-10 17:03
STM32串口通信详解以及通信异常或者卡死常见问题分析
异常一:数据传输中会出现乱码 数据传输中会出现乱码,很有可能是数组溢出,或者定义的数组长度不够。或者中断被打断。 异常二:程序卡在中断函数里面无法跳出执行主函数的逻辑 中断标志位没有被清除,在这里要注意一点,串口中断标志位自动清空的前提是软件需要先读USART_SR寄存器,然后读USART_DR寄存器来自动清除。即串口中断事件发生后,如果使能的接收中断,而中断函数里面什么都不执行的话,接收中断标志位是无法自动清空的,故而,函数会一直卡在中断函数里面。 比如一下这个函数,该函数没有逻辑问题,但会引发以上问题,代码如下 extern unsigned char star_time_led ; //计时开始变量 un
[单片机]
STM32开发笔记74: STM32L0低功耗唤醒后的时钟选择
单片机型号:STM32L053R8T6 本文介绍STM32L0系列单片机低功耗唤醒后的时钟选择。 参看已有的低功耗例程,发现都使能了HSI时钟,一致没有深究其中的具体原因,今天把它搞明白了,现记录如下: 先看一下,使能低功耗的函数: void CTarget::EnableLowPower(void) { HAL_PWREx_EnableUltraLowPower(); HAL_PWREx_EnableFastWakeUp(); __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI); DisableAllIO(); } 第1句使能超低功耗,第2句
[单片机]
hex文件大小与STM32中芯片flash大小的关系
之前一直以为STM32flash空间大小和hex文件相关,以为hex文件大小超过flas大小后程序就会出问题但是我发现hex文件大于flash也可以正常下载,有的程序也可以正常运行,有的不可以,所以经过总结如下: 1、flhex文件其实是个格式规范的文本文件。程序代码大小与hex文件大小没有绝对的关联性,因为我们在用串口下载程序时一般都是用的hex文件下载,,所以大家会以为hex文件大小和flash大小息息相关,hex文件大小超过了flash大小就会出问题,我也以为是这样,直到最近我发现有hex文件大于flash的大小但是依然可以写进去,因为真正烧写进去的是二进制文件,在hex文件中包含了bin文件的信息 2、hex文件大
[单片机]
stm32学习笔记——按键(扫描法)
目的:利用扫描IO口的方式直接操作按键 配置文件:#include stm32f10x_gpio.h #include stm32f10x_rcc.h 寄存器、结构体定义以及库函数参看流水灯一节 程序代码分析:(代码出自FIRE) Led.c文件再次不在叙述,参看流水灯一节 重点分析key.c文件,其基本结构如下: 1、按键io口初始化,这里有两个按键key1和key2,初始化过程完全相同 void Key1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体
[单片机]
STM32的串口中断配置
STM32的串口中断配置,也是很简单的. 首先是配置UART的GPIO口 /********************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None **********************************************************/ void UART1_GPIO_Configuration(void) { GPIO_InitTyp
[单片机]
STM32使用HAL库开发指南
准备内容 好奇心,耐心,细心 一台电脑,并安装keil5,以及STM32CUBEMX等开发应用。 JLINK或者ST-LINK模块。 STM32开发板或者最小系统板(我选用STM32F103RET6模块,配置与逻辑大同小异)。 01创建工程 步骤 1:在STM32CubeMX中创建一个项目 打开STM32CubeMX软件,在右上方的“Project”标签下,选择“New Project”。 在主界面上选择你需要使用的STM32系列芯片型号。 在左侧的选项树中,选择你需要的外设配置和时钟设置,并进行相应的配置。你可以根据自己的需求勾选或取消勾选相应的外设。 生成完成后,你可以选择打开生成代码所在
[单片机]
stm32专题三十四:独立看门狗 IWDG
独立看门狗简介 IWDG结构框图 (1)独立看门狗时钟 独立看门狗的时钟由独立的 RC 振荡器 LSI 提供, 即使主时钟发生故障它仍然有效,非常独立。 LSI 的频率一般在 30~60KHZ 之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。 (2)计数器时钟 实际的计数频率为: (3)计数器 (4)重装载寄存器 重装载寄存器是一个 12 位的寄存器,里面装着要刷新到计数器的值,这个值的大小决定着独立看门狗的溢出时间。 (5)键寄存器 寄存器说明: (6)状态寄存器: 如何使用IWDG
[单片机]
STM32的备份电池寿命
请教诸位使用STM32的兄弟: 如果用50mah的备份电池给STM32的RTC供电,能坚持多长时间?规格书上IDD_VBAT是。而VBAT的范围是1.8~3.6V。 ST是否有相应针对特定电池的数据。 -------------------------------------------------------------------- 半导体公司不会给出一个准确的数据,一般自己计算一下就好了。 比如50mAh的电池按照1.4uA放电,可以使用的时间为:50mAh / 1.4uA = 35714小时 CR2025电池 电压3.0V,容量150,尺寸20.0X2.5mm, 重量2.4g 150mAh / 1.4uA =
[单片机]