当前位置:   article > 正文

HAL库 STM32CubeMX----GPIO的工作模式、原理及其配置方法_cube配置gpio口为啥没有上下拉电阻

cube配置gpio口为啥没有上下拉电阻

一、STM32F1系列GPIO基本结构

在这里插入图片描述

  • 保护二极管: 二极管具有单向导电性,保护即防止I/O引脚过高或过低的电压输入。当结点处电压高于VDD(F1中的单极电源电压—3.3V) 时,上方二极管导通;当结点处电压低于VSS(公共接地端电压或电源负极) 时,下方二极管导通。以防非正常电压导致单片机出现异常数据及现象,甚至使芯片被烧毁
  • (内部)上拉电阻: 接入上拉电阻时引脚默认为高电平
  • (内部)下拉电阻: 接入下拉电阻时引脚默认为低电平
  • TTL施密特触发器: 来自I/O口的模拟信号经过触发器后,转化为0(即低电平) 和 1(即高电平)的数字信号 ——TTL电平协议
  • P-MOS管、N-MOS管: 位与输出驱动器中,根据两个MOS管的工作方式,使I/O口具有推挽输出和开漏输出 的输出模式。P-MOS管高电平导通,低电平关闭;N-MOS管低电平导通,高电平关闭

二、GPIO的四种输入模式

浮空输入

在这里插入图片描述
——I/O口的电平信号直接进入输入数据寄存器 ,此时I/O口的电平状态不确定,由外部输入决定,即引脚悬空时,读取的电平不确定

上拉输入

在这里插入图片描述
I/O口内部接入上拉电阻,I/O口默认为高电平,若其输入低电平时,则读取到的就是低电平

STM32CubeMX配置
  • 选择GPIO_Input——I/O口输入模式

在这里插入图片描述

  • System Core的GPIO 中,mode–模式,Pull-up–上拉

在这里插入图片描述

下拉输入

在这里插入图片描述
I/O口内部接入下拉电阻,I/O口默认为低电平,若其输入高电平时,则读取到的就是高电平

STM32CubeMX配置
  • 选择GPIO_Input——I/O口输入模式
  • System Core的GPIO 中,mode–模式,Pull-down–下拉
    在这里插入图片描述

模拟输入

在这里插入图片描述
I/O引脚用于ADC采集电压输入时,作为“模拟输入”功能,信号不经过施密特触发器,直接进入ADC外设,不能读取的引脚的电平状态
当GPIO为模拟输入时,内部的上拉、下拉电阻均不起作用,即使配置了也不影响模拟信号的输入输出

三、GPIO的四种输出模式

开漏输出

在这里插入图片描述
开漏输出模式中,仅有N-MOS管工作,若控制输出为低电平 0,则P-MOS管关闭,N-MOS管导通(VSS),使其输出低电平
若控制输出高电平 1,则P-MOS管和N-MOS管都关闭,输出指令不起作用,I/O口电平不由输出的高电平决定,而由外部的上拉或下拉决定,若没有则处于悬空状态,此时施密特触发器打开,读取的I/O口不一定是输出的电平

STM32CubeMX配置
  • 选择GPIO_Output——I/O口输出模式
  • System Core的GPIO
    在这里插入图片描述

推挽输出

在这里插入图片描述
推挽输出模式中,P-MOS管和N-MOS管都工作,若控制输出低电平 0,则P-MOS管关闭,N-MOS管导通,使其输出低电平;若控制输出高电平 1,则P-MOS管导通,N-MOS管关闭,使其输出高电平。上拉、下拉的作用是控制没有输出时的I/O口电平,此时触发器打开,读取到的I/O口电平就是输出的电平

STM32CubeMX配置
  • 选择GPIO_Output——I/O口输出模式
  • System Core的GPIO
    在这里插入图片描述

复用开漏输出在这里插入图片描述

GPIO复用为其他外设,输出数据寄存器无效,可读取到I/O口实际状态。除了输出信号来源改变(复用功能输出),其他与开漏输出功能相同

复用推挽输出

在这里插入图片描述
GPIO复用为其他外设,输出数据寄存器无效,输出的高电平来源于其他外设,可读取到I/O口实际状态。除了输出信号来源改变(复用功能输出),其他与推挽输出功能相同

四、常用GPIO函数

void HAL_GPIO_Init(GPIO_Typedef *GPIOx, GPIO_InitTypedef *GPIO_Init);
  • 1
  • 功能:GPIO初始化
  • eg: HAL_GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_PinState HAL_GPIO_ReadPin(GPIO_Typedef *GPIOx, uint16_t GPIO_Pin);
  • 1
  • 功能:读取引脚电平,返回值为0或1
  • eg: HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);
void HAL_GPIO_WritePin(GPIO_Typedef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
  • 1
  • 功能:使引脚写入0(低)或1(高)
  • eg: HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
void HAL_GPIO_TogglePin(GPIO_Typedef *GPIOx, uint16_t GPIO_Pin);
  • 1
  • 功能:翻转引脚的电平
  • eg: HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_6); 一般用于led
HAL_StatusTypedef HAL_GPIO_LockPin(GPIO_Typedef *GPIOx, uint16_t GPIO_Pin);
  • 1
  • 功能:锁住引脚电平,当发生电平变化时,保持锁定的电平状态
  • eg: HAL_GPIO_LockPin(GPIOA,GPIO_PIN_2);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/126110
推荐阅读
相关标签
  

闽ICP备14008679号