GPIO工作模式

2023-11-04

参考链接:
【STM32】STM32F4 GPIO八种模式及工作原理详解_Z小旋-CSDN博客_stm32io口的八种工作模式

GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

GPIO的工作模式

1、4种输入模式

(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入

// 浮空、上拉、下拉
typedef enum
{ 
  GPIO_PuPd_NOPULL = 0x00,
  GPIO_PuPd_UP     = 0x01,
  GPIO_PuPd_DOWN   = 0x02
}GPIOPuPd_TypeDef;
#define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \
                            ((PUPD) == GPIO_PuPd_DOWN))

2、4种输出模式

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

输入不需设置推挽或开漏。

  • 推挽输出:

可以输出强高低电平,连接数字器件 。

推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.

  • 开漏输出:

可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 需要外接上拉电阻,才能实现输出高电平 合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);

在使用任何一种开漏模式时,都需要接上拉电阻,否则只能输出低电平。

// 输入、输出、复用(Alternate function Mode)、模拟(Analog)
typedef enum
{ 
  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IN)  || ((MODE) == GPIO_Mode_OUT) || \
                            ((MODE) == GPIO_Mode_AF)|| ((MODE) == GPIO_Mode_AN))
// 推挽、开漏
typedef enum
{ 
  GPIO_OType_PP = 0x00,
  GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;
#define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))

3、4种最大输出速度

(1)2MHZ (低速)
(2)25MHZ (中速)
(3)50MHZ (快速)
(4)100MHZ (高速)

// 输出速度
typedef enum
{ 
  GPIO_Low_Speed     = 0x00, /*!< Low speed    */
  GPIO_Medium_Speed  = 0x01, /*!< Medium speed */
  GPIO_Fast_Speed    = 0x02, /*!< Fast speed   */
  GPIO_High_Speed    = 0x03  /*!< High speed   */
}GPIOSpeed_TypeDef;

/* Add legacy definition */
#define  GPIO_Speed_2MHz    GPIO_Low_Speed    
#define  GPIO_Speed_25MHz   GPIO_Medium_Speed 
#define  GPIO_Speed_50MHz   GPIO_Fast_Speed 
#define  GPIO_Speed_100MHz  GPIO_High_Speed  
  
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_Low_Speed) || ((SPEED) == GPIO_Medium_Speed) || \
                              ((SPEED) == GPIO_Fast_Speed)||  ((SPEED) == GPIO_High_Speed)) 

GPIO工作模式的选择

1、用于ADC、DAC时

ADC 和 DAC 要将 IO 配置为模拟通道。

当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出。

2、除ADC、DAC的其他外设功能

配置为复用功能模式。

3、不接外设时

上拉:悬空时,为高电平。若输入为低电平,则引脚电平为低。
下拉:悬空时,为低电平。若输入为高电平,则引脚电平为高。
浮空:悬空时,引脚电压不定,易受到干扰。

STM32中为弱上拉,即通过此上拉输出的电流是很弱的,如要求大电流还是需要在外部再接大电阻上拉到高电平。上拉电阻一般比较大,因为电阻太小电流分流多,会导致带负载能力弱,一般取5.1K~10K。

只有输出模式才需要配置推挽、开漏,输入模式下不需要配置。

实例

1、推挽输出模式——点亮LED灯

硬件

如下图做好外设接线,LED负极连接单片机STM32F407ZET6的PB11。
在这里插入图片描述

软件

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"

// 配置GPIO
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;    
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // 开启外设时钟

	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
    GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化
}

int main()
{
	LED_Init();
	GPIO_SetBits(GPIOB, GPIO_Pin_11); // 置高电平,LED常量
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPIO工作模式 的相关文章

  • 【JavaScript内置对象】Date对象,从零开始

    JavaScript内置对象 Date对象 从零开始 时间的表示方式 时间表示的基本概念 最初 人们是通过观察太阳的位置来决定时间的 但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的 相互之间没有办法通过一个统一的时间来
  • 数据结构:线性表理论题目集

    大一下半期数据结构 数据结构 第2章 线性表 选择题 1 下述哪一条是顺序存储结构的优点 北方交通大学 2001 一 4 2分 A 存储密度大 B 插入运算方便 C 删除运算方便 D 可方便地用于各种逻辑结构的存储表示 2 下面关于线性表的
  • Java 中数据结构HashMap的用法

    Java HashMap HashMap 是一个散列表 它存储的内容是键值对 key value 映射 HashMap 实现了 Map 接口 根据键的 HashCode 值存储数据 具有很快的访问速度 最多允许一条记录的键为 null 不支

随机推荐

  • linux上运行gfortran,linux – gfortran:在64位系统中编译32位可执行文件

    我在AMD Athlon tm 64 X2双核处理器5200 2上运行Ubuntu 12 10 64位 Linux内核3 5 0 51通用 我有GNU Fortran Ubuntu Linaro 4 7 2 2ubuntu1 4 7 2 我
  • 数字三角形(C语言)

    一 问题描述 给定一个由行数字组成的数字三角形 试着设计一个算法 计算出从三角形的顶到底的一条路径 使得该路径经过的数字总和最大 并分析算法的计算复杂性 如下图所示 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 二 问题分析及
  • Adam优化算法(Adam optimization algorithm)

    Adam优化算法 Adam optimization algorithm Adam优化算法基本上就是将Momentum和RMSprop结合在一起 初始化 2 在第t次迭代中 用mini batch梯度下降法计算出dw和db 3 计算Mome
  • mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...

    关于日期函数TO TIMESTAMP 拓展 date类型是Oracle常用的日期型变量 时间间隔是秒 两个日期型相减得到是两个时间的间隔 注意单位是 天 timestamp是DATE类型的扩展 可以精确到小数秒 fractional sec
  • 打卡湘大OJ第一天

    1063 输入与输出1 Description 请输入一个非负整数 输出其10进制和16进制 使用A F 的值 中间用逗号隔开 不要输出换行 Sample Input 15 Sample Output 15 F 题解 include
  • 听说你还不会写通讯录?C语言通讯录#存储到文件里去,动态版

    前言 会写的不一定真的懂了 本篇文章结合了B站鹏哥的写作手法 循序渐进推进知识点 一步步教你写代码 非常适合初学者学习 建议反复观看 同时作者我也是一个C语言B站初学者 欢迎一起学习交流 批评指正 家人们 来都来了 动动你们发财的小手 给我
  • git指令

    拉取远程分支 git checkout track origin dev git reset soft a0ad996d7b797745c9bdc93e2de6d1bc30ddce8b 一 Git 常用命令速查 git branch 查看本
  • 如何在十分钟内插入1亿条记录到Oracle数据库?

    这里提供一种方法 使用 APPEND 提示 使得十分钟内插入上亿数据成为可能 Create table create table TMP TEST CHAS LEE f01 VARCHAR2 20 f02 NUMBER 10 not nul
  • XSS-Game level 5

    第五关过滤了
  • Java学完SSM后很迷茫,接下来该学哪些呢?

    没必要跟着别人的学习路线图走 你要清楚你的目的是找工作 写过很多次大学的四年安排 今天这篇专门写给大四即将找工作的同学 一 找什么工作 首先分析自己想干什么 以题注说的是Java为主 那么起码要知道找一个Java开发的工作需要什么能力 基本
  • postgresql 中的COALESCE()函数使用小技巧

    这篇文章主要介绍了postgresql 中的COALESCE 函数使用小技巧 具有很好的参考价值 希望对大家有所帮助 一起跟随小编过来看看吧 场景 存在一个用户白名单表 提供了此用户的用户名和地区信息 判断此用户是否在此白名单表中 如 姓名
  • Spring Boot 获取接口调用者的IP

    需求 我们实现一个登陆功能时 可能会有需要记录登陆者IP的需求 用于系统安全分析或账户来源分析 当然还有更多应用场景 工具类如下 来源于网络 已兼容K8S 代理的情况 import org slf4j Logger import org s
  • 树莓派解决 vim 编辑器中文乱码问题

    目录 1 问题由来 2 乱码问题演示 3 解决方案 4 问题解决 1 问题由来 我们用树莓派做项目的时候经常需要在电脑编写程序代码 然后再把代码移植进树莓派进行运行 我们用电脑编写程序的时候避免不了都会写很多中文注释 当我们把 file c
  • 【BEV Review】论文 Delving into the Devils of Bird’s-eye-view 2022-9 笔记

    背景 一般来说 自动驾驶车辆的视觉传感器 比如摄像头 安装在车身上方或者车内后视镜上 无论哪个位置 摄像头所得到的都是真实世界在透视视图 Perspective View 下的投影 世界坐标系到图像坐标系 这种视图与人类的视觉系统很类似 因
  • 表单数据自动封装到javaBean中

    页面表单数据的自动封装到javaBean中 先定义一个Bean类 package com test public class Bean private String name private Integer sex public Strin
  • AD19铺铜操作

    1 在Keep OUT层沿板子边缘画出板子形状 2 PCB设计界面右上角 设置 PCB Editor General 勾选 铺铜修改后自动重铺 3 铺铜之前 打一些过孔 连接板子上下两层 双层板 并设置为GND网络 右边Properties
  • 复制文件夹所有内容 和 删除整个文件夹的2个函数

    选择自 hycapril 的 Blog 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面 如果目标文件夹为只读属性就会报错 April 18April2005 In STU public static void CopyD
  • keil4 破解心得

    keil4 破解心得 Obj STM32 FD SDCard MP3 axf error L6047U The size nb 在编译时出现 Obj STM32 FD SDCard MP3 axf error L6047U The size
  • bes2300之环境搭建(一)

    目录 环境搭建 sdk文件结构介绍 编译 烧录 配置烧录选项 选择端口 启动升级 简单使用 环境搭建 安装编译工具链 gcc arm none eabi 4 9 2014q4 20141203 win32 exe make 3 81 exe
  • GPIO工作模式

    参考链接 STM32 STM32F4 GPIO八种模式及工作原理详解 Z小旋 CSDN博客 stm32io口的八种工作模式 GPIO 即通用I O 输入 输出 端口 是STM32可控制的引脚 STM32芯片的GPIO引脚与外部设备连接起来