【STM32】STM32F4 GPIO详解与配置

这篇具有很好参考价值的文章主要介绍了【STM32】STM32F4 GPIO详解与配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. GPIO简介

GPIO是通用输入输出端口的简称,为STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,所有的GPIO引脚都有基本的输入输出功能。

  1. GPIO内部构图

【STM32】STM32F4 GPIO详解与配置
  • GPIO口可容忍电压

其中保护二极管使GPIO能够5V电压容忍。在手册中可以找到GPIO口图中标注FT的GPIO口为可容忍5V电压输入GPIO口。

引脚的两个保护二极管可以防止引脚外部过高或过低的电压输入,当引脚电压高VDD_FT(5V)于时,上方的二极管导通,当引脚电压低于Vss时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。

【STM32】STM32F4 GPIO详解与配置

第8列中的FT即表示此GPIO口引脚可容忍5V电压

  • 上下拉电阻

  • 概述

上拉电阻:将一个不确定的信号(高或低电平),通过一个电阻与电源VCC相连,固定在高电平。

下拉电阻:将一个不确定的信号(高或低电平),通过一个电阻与地GND相连,固定在低电平。

在内部构图中可以看出通过上、下拉电阻的开关配置,我们可以控制引脚默认状态的电压,开启上拉的时候引脚电压为高电平,开启下拉的时候引脚电压为低电平。

【STM32】STM32F4 GPIO详解与配置
【STM32】STM32F4 GPIO详解与配置
  • GPIO口输入工作模式一.浮空输入模式

【STM32】STM32F4 GPIO详解与配置

VDD和VSS所在路径的两个开关同时断开。此时没有上拉和下拉的情况,所以当IO口没有接输入的时候,此时的电平会是一个不确定的值,也就是我们所说的浮空。电平会处于一个跳变的状态,一会高,一会低。只有输入了一个高/低电平才会确定下来。设置‘无上拉或下拉’(浮空模式)模式时,直接用电压表测量其引脚电压跳变,这是个不确定的值。所以一般来说我们都会选择给引脚设置“上拉模式”或“下拉模式”使它有默认状态。STM32的内部上拉时“弱上拉”,即通过上拉输出的电流时很弱的,如要求大电流还是需要外部上拉,通过“上拉/下拉寄存器GPIOx_PUPDR”控制引脚的上、下拉及浮空模式。

优势:这一种输入模式的电平会完全取决于外部电路而与内部电路无关。有时候会用作对开关按键的读取。

缺点:但是在没有外部电路接入的时候,IO脚浮空会使得电平不确定,会使MCU进行误操作。

  • GPIO口输入工作模式二.上拉输入模式

【STM32】STM32F4 GPIO详解与配置

VDD所在上拉电阻开关闭合,下拉电阻的开关断开。根据前面浮空输入里面所提的,在没有信号输入的时候,此时的电平就是VDD的电平,此时读取到的电平就是高电平。

当输入信号是一个低电平(<1.166v)的时候,电压就会被拉低变成低电平,那么VDD和输入电压之间形成了电势差,但是因为上拉电阻的存在,所以不会出现一个大电流。此时单片机读取到的一个电平就是一个低电平。在上拉输入的情况下,低电平的是能够非常明显的读取到的。

优势:输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在高电平。

缺点:如果输入了一个高电平,VDD和输入电压就没有电势差,此时读取到的电平就仍然是高电平。这一种输入情况下是没有办法确定信号是否输入了。

  • GPIO口输入工作模式三.下拉输入模式

【STM32】STM32F4 GPIO详解与配置

VDD所在上拉电阻开关断开,下拉电阻的开关闭合。电平就是VSS的电平,此时读取到的电平就是低电平。如果输入的是一个高电平,输入电压和VSS之间同样形成了电势差,输入的电平会变成外部的高电平,那么单片机得到的就是一个高电平信号。

优势:下拉输入的好处就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在低电平。

缺点:此时输入的电平如果是一个低电平,就没有办法和之前的情况进行区分。

  • GPIO口输入工作模式四.模拟输入模式

【STM32】STM32F4 GPIO详解与配置

概述:模拟量输入(Analog Input,简称AI)是指输入为连续变化的物理量(电压)

在STM32F4中,我们有时候需要用AD采集到IO口上面的真实电压。需要用到模拟输入。为了让MCU读取到真实的外部的电压,我们既不能闭合上拉和下拉的开关,也不能让电压信号经过施密特触发器。

  • GPIO口输出工作模式一.开漏输出模式

【STM32】STM32F4 GPIO详解与配置

概述:开漏输出就是不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。

这种方式适合在连接的外设电压比单片机电压低的时候。\

优势:开漏输出的实质其实就是一个OD门(OD:漏极输出(Open Drain))。而在数电中,OD门有一个非常重要的特性就是可以实现线与的功能,简单来说,就是在像IIC这样的总线协议中,只要有一个给低电平,那么总线都会被拉低。

【STM32】STM32F4 GPIO详解与配置
  • GPIO口输出工作模式二.开漏复用输出模式

【STM32】STM32F4 GPIO详解与配置
  • GPIO口输出工作模式三.推挽输出模式

【STM32】STM32F4 GPIO详解与配置

推挽输出就是可以需要利用两个不同的MOS管来实现输出。P-MOS和N-MOS是不同的控制方式,当给一个高电平的时候,N-MOS导通,P-MOS不导通,此时IO口接通在VSS,此时输出的是低电平。当给一个低电平的时候,P-MOS导通,N-MOS导通,此时IO口接通在VDD电源上面,此时输出的是高电平。

  • GPIO口输出工作模式四.复用推挽输出模式

【STM32】STM32F4 GPIO详解与配置
  • 上电复位

上电复位后,GPIO默认为浮空状态,部分特殊功能引脚为特定状态。文章来源地址https://www.toymoban.com/news/detail-465085.html

【STM32】STM32F4 GPIO详解与配置
  • GPIO口寄存器

每组GPIO端口的寄存器包括:

一个端口模式寄存器(GPIOx_MODER)
一个端口输出类型寄存器(GPIOx_OTYPER)
一个端口输出速度寄存器(GPIOx_OSPEEDR)
一个端口上拉下拉寄存器(GPIOx_PUPDR)
一个端口输入数据寄存器(GPIOx_IDR)
一个端口输出数据寄存器(GPIOx_ODR)
一个端口置位/复位寄存器(GPIOx_BSRR)
一个端口配置锁存寄存器(GPIOx_LCKR)
两个复位功能寄存器(低位GPIOx_AFRL & GPIOx_AFRH)
  • 端口模式寄存器(GPIOx_MODER)

【STM32】STM32F4 GPIO详解与配置
  • 端口输出类型寄存器(GPIOx_OTYPER)

【STM32】STM32F4 GPIO详解与配置
  • 端口输出速度寄存器(GPIOx_OSPEEDR)

【STM32】STM32F4 GPIO详解与配置
  • 端口上拉/下拉寄存器(GPIOx_PUPDR)

【STM32】STM32F4 GPIO详解与配置
  • 端口输入数据寄存器(GPIOx_IDR)

【STM32】STM32F4 GPIO详解与配置
  • 端口置位/复位寄存器(GPIOx_BSRR)

【STM32】STM32F4 GPIO详解与配置
  • 基础知识

4种输入模式:
       输入浮空
       输入上拉
       输入下拉
       模拟输入
4种输出模式:
      开漏输出(上拉或者下拉)
      开漏复用功能(上拉或者下拉)
      推挽式输出(上拉或者下拉)
      推挽式复用功能(上拉或者下拉)
4种最大输出速度:
       -2MHZ
       -25MHz
       -50MHz
       -100MHz
  • 库函数介绍

1个初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取当前GPIO口的电平状态
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);  //读取当前GPIO口组的所有IO口电平状态

2个读取输出电平函数:
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  //读取当前设置GPIO口输出电平为何状态
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);  //读取当前GPIO口组所有IO口输出状态

4个设置输出电平函数:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);   //设置单个GPIO口输出高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //设置单个GPIO口输出低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);   //不常用
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);      //不常用
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);//作用:初始化一个或者多个IO口(同一组)的工作模式,输出类型,速度以及上下拉方式。也就是一组IO口的4个配置寄存器。
//
//typedef struct
//{
//  uint32_t GPIO_Pin//指定要初始化的端口
//  GPIOMode_TypeDef GPIO_Mode;//端口模式
//  GPIOSpeed_TypeDef GPIO_Speed;//速度
//  GPIOOType_TypeDef GPIO_OType; //输出类型
//  GPIOPuPd_TypeDef GPIO_PuPd;//上拉或者下拉
//}GPIO_InitTypeDef;
  • 函数编写示例

#include "stm32f4xx.h"
void LED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
    
    
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9|GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
    
    
    GPIO_Init(GPIOF,&GPIO_InitStructure);
    GPIO_SetBits(GPIOF,GPIO_Pin_9);
    GPIO_SetBits(GPIOF,GPIO_Pin_10);
    
}

到了这里,关于【STM32】STM32F4 GPIO详解与配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32教程】第二章 通用输入输出口GPIO

    资料下载链接: 链接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj  提取码:jauj    GPIO(General Purpose Input Output)意思是通用输入输出口可配置为8种输入输出模式,其引脚电平:0V~3.3V,部分引脚可容忍5V(容忍5V的意思是可以在这个端口输入5V,相当于输入一个高电平,而输

    2024年02月09日
    浏览(34)
  • 一眼就能看懂STM32的外设GPIO(通用输入输出)

    GPIO,简称通用输入输出,关键在于他是通用的。任何外设都可以用它,他的主要目的在于控制的IO,输出或由外部输入高低电平,与之对应的是AFIO的复用输入输出,当用到引脚的第二个功能的时候,就需要启用它; 你只需要记住他:他是控制引脚(IO口)的输入输出功能,高

    2024年02月04日
    浏览(32)
  • 嵌入式-Stm32-江科大基于标准库的GPIO通用输入输出口

    (推荐先看文章:《 嵌入式-32单片机-GPIO推挽输出和开漏输出》) 下文图都是从参考手册借阅:STM32F10xxx(中文),大概页数是110/775左右 GPIO (General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V(有FT标识) 输出模式 下可控

    2024年01月17日
    浏览(45)
  • 关于STM32F4系列中printf重定向问题详解

    前言 关于 printf函数 和 fputc函数 联系和区别 联系: 1.共同目标: printf 函数和 fputc 函数都用于将字符 输出到指定的输出流中 。 2.字符输出: 两个函数都可以用于输出一个字符,但在实际使用时, printf 函数 通常用于输出 格式化的数据 ,而 fputc 函数 更常用于 单个字符的直

    2024年02月03日
    浏览(37)
  • STM32F4_定时器输入捕获详解

    目录 1. 输入捕获简介 2. 输入捕获框图 3. 输入捕获模式 4. 相关寄存器 4.1 TIMx_ARR、TIMx_PSC 4.2 捕获/比较寄存器1:TIMx_CCMR1 4.3 捕获/比较使能寄存器 TIMx_CCER 4.4 中断使能寄存器 TIMx_DIER 5. 库函数配置输入捕获高电平脉冲宽度 6. 实验程序 6.1 main.c 6.2 IntputCapture.c 6.3 IntputCapture.h    

    2024年02月04日
    浏览(40)
  • STM32F407 GPIO口输出配置配置步骤

    STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。 说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通

    2024年02月12日
    浏览(43)
  • STM32F4 CAN驱动配置,以及SEG1,SEG2的最佳配置

    平台:MDK5 单片机型号:STM32F407VG HAL库版本:V1.8.1 该程序在APB1时钟为42M速率的情况下,将CAN配置为500KBps. 通过SystemClock_Config函数,将主频配置为168M(最大),APB1为42M(最大)。CAN的波特率=42M/(1 + TimeSeg1 + TimeSeg2) = 42M/(1+12+8)=500Kbps。 先附上参考链接 https://blog.csdn.net/qfmzhu/article/det

    2024年02月09日
    浏览(33)
  • GD32F4移植STM32F4

    近期在项目中采用了GD32F407VET6替换原项目中的STM32F407VET6,网传GD的兼容性很好,之前也用F1系统的替换了一下,按照CSND各位大佬的经验一步步改进了代码,测试直接通过,现在也一直在项目中实际应用了,一直没有出问题。 所以这SMT时,嘉立创没有STM的货果断换成了GD,可换时

    2024年02月16日
    浏览(72)
  • STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxx

    ①在线编程(ICP,In-Circuit Programming) :通过JTAG/SWD协议或者系统加载程序(Bootloader, 串口 )下载用户应用程序到微控制器中。 ②在程序中编程(IAP,In Application Programming) :通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中( 需要在此前通过在线编

    2024年02月07日
    浏览(35)
  • stm32f407VET6 系统学习 day01 GPIO 配置

    GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中

    2023年04月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包