stm32f407VET6 系统学习 day01 GPIO 配置

news2024/11/20 10:24:53

1. GPIO 的5个配置  

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

STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。  并且F4系列是基于Cortex-M4内核 

GPIO的复用:

STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。    比如说串口  就是GPIO复用为串口.

 配置: 

1.引脚号:                GPIO_Pin

2. 工作模式:           GPIO_Mode

3. 配置速度:            GPIO_Speed

4.输出/输入的方式:  GPIO_OType

5.有无上拉电阻 :       GPIO_PuPd  


分析每个配置的参数:

 

1. 引脚号   参数 (17 个)

 GPIO_Pin_x (0--15)


2. 工作模式    (4个参数)

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;

        GPIO_Mode_IN     端口为输入模式

        GPIO_Mode_OUT    端口为输出模式

         GPIO_Mode_AF      端口为 复用模式 

        GPIO_Mode_AN      端口 为  GPIO模拟模式

解释:

复用模式: STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的。一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。(简单来说 ,这个口子,我同时需要做 输出和输入, 这就是复用 )

GPIO模拟模式:引脚信号直接连接模拟输入,实现对外部信号的采集,可以收集 0~Vss 的电压 值。 (简单点, ADC   DAC   数模转换,模数转换的 专用模式        )


 3.速度 参数 

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  

GPIO_Low_Speed             速度为   2MHZ

GPIO_Medium_Speed      速度为   25MHZ

GPIO_Fast_Speed            速度为   50MHZ

GPIQ_High_Speed            速度为   100MHZ


4.输出/输入的方式:  2个参数

typedef enum
{ 
  GPIO_OType_PP = 0x00,
  GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;

GPIO_OType_PP       推挽输出  (推挽输出既可以输出高电平也可以输出低电平。)

GPIO_OType_OD        开漏输出   (只能输出低电平,要想输出高电平必须要接上拉电阻)


5.有无上拉电阻 :        (3个参数)

typedef enum
{ 
  GPIO_PuPd_NOPULL = 0x00,
  GPIO_PuPd_UP     = 0x01,
  GPIO_PuPd_DOWN   = 0x02
}GPIOPuPd_TypeDef;

GPIO_PuPd_NOPULL     ( 浮空)

GPIO_PuPd_UP          (上拉电阻)   (开始的时候这个 端口的 电平是高电平)

GPIO_PuPd_DOWN      (下拉电阻)  (开始的时候这个端口的 电平是低电平)



6.配置输入输出模式有下面几点值得注意:

作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。

作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。

作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。

作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。


7.配置为 八种工作模式

4种输入模式

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

4种输出模式 

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


8. 开始配置 8种模式

1. GPIO_Mode_IN_FLOATING 浮空输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_NOPULL     ;  //  浮空电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

 


2.GPIO_Mode_IPU 上拉输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_UP  ;  //  上拉电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

3.GPIO_Mode_IPD 下拉输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_DOWN   ;  //  下拉电阻
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

4.GPIO_Mode_AIN 模拟输入

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AN  ; // 输入模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 随意  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

5.GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT  ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);


6.GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
	GPIO_Init(GPIOE,&GIOSTRUCT);


7.GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT   ; // 输出模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);


8.GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

     
//1.配置时钟: 给个心跳。 选择需要的时钟频率
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    GPIO_InitTypeDef GIOSTRUCT;
	
	//2.配置功能: 功能太多。 选择GPIO功能;
	GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF   ; // 复用模式 
	GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引脚 
	GIOSTRUCT.GPIO_PuPd= 上拉/下拉  ;  // 
	GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
	//外部无上拉电阻选择推挽输出,  外部有上拉电阻选择开漏输出
	GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
	GPIO_Init(GPIOE,&GIOSTRUCT);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

首创证券上交所上市:募资19亿市值306亿 上半年净利降14%

雷递网 雷建平 12月23日首创证券股份有限公司&#xff08;简称&#xff1a;“首创证券”&#xff0c;股票代码为&#xff1a;“601136”&#xff09;昨日在上交所上市。首创证券此次发行27,333.38万股&#xff0c;发行价为7.07元&#xff0c;募资总额为19亿元。首创证券首日收盘…

小学生C++编程基础 课程10

938.最小公倍数的简单方法 &#xff08;课程A&#xff09; 难度&#xff1a;1 登录 939.最大公约数的简单方法 ( 课程A&#xff09; 难度&#xff1a;1 登录 940.韩信点兵 &#xff08;课程A&#xff09; 难度&#xff1a;1 登录 941.求123…N的和 &#xff08;课程A&#x…

Bloom filter-based AQM 和 BBR 公平性

设 B 为 Delivery rate&#xff0c;D 为 Delay&#xff0c;将 E B/D 作为衡量效能&#xff0c;所有流量的收敛状态是一个 Nash 均衡&#xff0c;没有任何流量有动机增加或者减少 inflight。参见&#xff1a;更合理的 BBR。 并不是都知道这道理&#xff0c;增加 inflight 能挤…

Java环境配置——Linux 安装JDK

注意这是用普通用户登录后&#xff0c;单独设置用户的java环境变量&#xff0c;非root用户 root用户的编辑命令是 vi /etc/profile 下载安装包 创建java目录 mkdir java 进入目录 cd java 上传安装包 将jdk-8u161-linux-x64.tar.gz上传到java目录 配置环境变量 解压安…

并查集详解

1.并查集原理 某公司今年校招全国总共招生10人&#xff0c;西安招4人&#xff0c;成都招3人&#xff0c;武汉招3人&#xff0c;10个人来自不同的学校&#xff0c;起先互不相识&#xff0c;每个学生都是一个独立的小团体&#xff0c;现给这些学生进行编号&#xff1a;{0, 1, 2,…

156. 如何在 SAP UI5 应用里显示 PDF 文件

SAP 不少标准应用都可以在业务流程进行到某个阶段,根据系统里的业务数据和 SAP 事先开发好的表单模板,生成最终的 PDF 文件并显示在应用页面上。 本文介绍一种在 SAP UI5 页面里嵌入显示 PDF 文件内容的方式,效果如下。 点击屏幕右上角的下载图标,可以将这个显示的 PDF 下…

ASP.NET 企业人力资源管理系统源码 HR源码 前端bootstrap框架开发

中小型企业HR人力资源管理系统源码带使用手册和操作说明 了解更多&#xff0c;可私信我&#xff01; 【程序语言】&#xff1a;.NET 【数据库】&#xff1a;SQL SERVER 2008 【运行环境】&#xff1a;WINDOWSIIS 【其他】&#xff1a;前端bootstrap框架 运行环境&#xff1…

学习记录-mybatis+vue+elementUi实现分页查询(前端部分)

前端这一块最方便的莫过于是element已经提供好了 接口&#xff0c;三个最关键的接口这里首先解决第一个&#xff0c;总数。 //总记录数totalCount:100,我直接在data中将其先初始化为100&#xff0c;之后直接在响应中设置&#xff0c;这是从后端查询到的值&#xff0c;不需要任何…

华为被迫开源,从认知到落地SpringBoot企业级实战手册(完整版)

前言 本手册重在引导读者进入真实的项目开发体验&#xff0c;围绕Spring Boot技术栈全面展开&#xff0c;兼顾相关技术的知识拓展&#xff0c;由浅入深&#xff0c;步步为营&#xff0c;使读者既能学习基础知识&#xff0c;又能掌握. 一定的开发技巧。本书的目标是让读者拥有一…

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法。 什么是容器退出码 当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本…

Hadoop3.3.4最新版本安装分布式集群部署

Index of /dist/hadoop/commonhttps://archive.apache.org/dist/hadoop/common 集群规划&#xff1a; 注意&#xff1a; NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存&#xff0c;不要和NameNode、SecondaryNameNode配置在同一台机器上。 …

PHP 变量

变量是用于存储信息的"容器"&#xff1a; 实例 <?php $x5; $y6; $z$x$y; echo $z; ?> 运行实例 与代数类似 x5 y6 zxy 在代数中&#xff0c;我们使用字母&#xff08;如 x&#xff09;&#xff0c;并给它赋值&#xff08;如 5&#xff09;。 从上面的…

echarts的grid——图表的位置配置

首先还是先认识grid&#xff0c;要弄清楚grid是哪一块区域&#xff0c;这就牵扯到对echarts图表元素的基本认识。为此&#xff0c;我做了一个总结&#xff0c;如图所示&#xff1a; 数学里的笛卡尔坐标系分为直角坐标系 和斜坐标系。而grid只适用于直角坐标系&#xff01; 我们…

分布式理论之分布式互斥

写在前面 本文一起看下分布式理论中的分布式互斥&#xff08;distributed mutual[ˈmjutʃuəl] exclusion&#xff09;问题&#xff0c;以及解决该问题相关算法。 1&#xff1a;什么是分布式互斥 我们先看下什么是临界资源&#xff08;critical resource&#xff09;&#…

如何提高苹果商店ASA广告的展示份额

众所周知&#xff0c;APP获得曝光后&#xff0c;才会有用户的点击率和下载&#xff0c;接下来柚鸥ASO会告诉大家&#xff0c;如何在保障ROI&#xff08;是指投入成本跟获得的收益的比值&#xff09;的情况下&#xff0c;为ASA获得最大的展示份额。 CPM是指通过商家付费&#x…

【nowcoder】笔试强训Day2

目录 一、选择题 二、编程题 2.1排序子序列 2.2倒置字符串 一、选择题 1.A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的&#xff08;&…

19. 【gRPC系列学习】拦截器Interceptor

无论客户端还是服务端在远程调用前后执行一些通用逻辑,例如Gin框架,实现日志、监控、认证、Recover等通用逻辑,gRPC也提供这样的机制。 拦截器分为:一元拦截器、流拦截器,这两种拦截器在客户端、服务端都可以使用。拦截器的执行流程如图:其中InHandlerx与outHandlerx是同…

1 月 25 日见|Flutter Forward 活动日程表正式发布!

2023 年 1 月 25 日 (正月初四)&#xff0c;我们将在肯尼亚首都内罗毕举办 Flutter Forward 大会&#xff0c;并同时开启线上直播。本次活动将为展示最新的 Flutter 技术更新&#xff0c;包括一个主题演讲以及多个技术演讲和线上问答&#xff0c;全方位展示 Flutter 如何推动 U…

B+树 [数据结构与算法][Java]

B树 B树是B树的一种变形 我们通过一颗四阶B树来理解认识一下B树:(如下:) 我们其实从图上就可以看出B树和B树是有很多不同之处的 比如我们的B树中将叶子结点层的所有结点使用一个链表串联了起来B树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查…

离散数学数理逻辑部分

前言 本文创作的起因是&#xff0c;经历了离散数学的学习&#xff0c;深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文&#xff0c;有些不太合适&#xff0c;但是还是相信本文的质量和内容&#xff0c;可以给正在学习离散数学的大学生提供一些…