stm32F407-GPIO的使用——点亮LED并且讲解各个寄存器

stm32F407-GPIO的使用——点亮LED并且讲解各个寄存器

本文为stm32GPIO的介绍与使用,例子是简单的LED点亮。

一、 GPIO

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,
就是一些引脚,可以控制它们输出高低电平或者通过它们获取引脚的状态,
是高电平或是低电平。GPIO口一是个比较重要的概念,GPIO在嵌入式开发
中应用非常广泛,主要用于:
(1) 开关量的输入、输出,读取开关的状态,控制开关的关和开
(2) 控制硬件,例如LED,蜂鸣器
(3) 用于中断信号的输入引脚
(4) 使用GPIO模拟I2C, SPI接口时序与外部设备通信等

GPIO端口结构如下:
在这里插入图片描述

1.1 GPIO 端口的结构组成

由上面的图可以看出有下面几个重要组成部分:

① 保护二极管
有两个保护二极管,用于保护引脚外部过高或过低的电压输入

②上下拉电阻
阻值约在30k-50k之间,可以通过上、下两个对应的开关控制,这两个开关由寄存器控制
当引脚外部的器件没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下拉决定,开启内部上拉电阻工作,引脚电平为高,开启内部下拉电阻工作,则引脚电平为低。同样,如果内部上、下拉电阻都不开启,这种情况就是我们所说的浮空模式。浮空模式下,引脚的电平是不可确定的。引脚的电平可以由外部的上、下拉电平决定。需要注意的是,STM32 的内部上拉是一种“弱上拉”,这样的上拉电流很弱,如果有要求大电流还是得外部上拉。

③ 施密特触发器
对于标准施密特触发器,当输入电压高于正向阈值电压,输出为;当输入电压低于负向阈值电压,输出为;当输入在正负向阈值电压之间,输出不改变,也就是说输出由高电准位翻转为低电准位,或是由低电准位翻转为高电准位对应的阈值电压是不同的。只有当输入电压发生足够的变化时,输出才会变化.

④ P-MOS 管和 N-MOS 管
这个结构控制 GPIO 的开漏输出和推挽输出两种模式。

STM32F4 的 IO 可以由软件配置成如下 8 种模式中的任何一种:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏式复用功能

开漏输出:只能输出低电平,如果要输出低电平则需要加一个上拉电阻。
推挽输出:这两只对称的 MOS 管每次只有一只导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载拉电流。推拉式输出既能提高电路的负载能力,又能提高开关速度。

在这里插入图片描述

还有要注意的是如何判断是输入还是输出

输入输出是对于CPU而言的,比如我们需要点亮一个LED,则我们需要给LED的的这个引脚口给电平,那么这个电平是需要CPU去主动"给"的,所以这样需要CPU"给"的这种方式就是输出,换而言之就是需要在这个LED引脚口需要输出为某一电平。
相反的输入,就是CPU从某个引脚“获取”电平状态,典型的就是按键,我们是需要不断的检测按键的这个引脚的电平是什么状态,再进行下一步的操作,换而言之,就是按键将自己的电平状态反应给了CPU,进行了“输入”。

二、 LED

LED 是最经典的GPIO的使用,也是新手入门必须学会的——点灯.

LED的电路如下:可以看到右边是接共同的3.3V是共阳的LED模块,所以我们需要给LED引脚低电平就可以点亮该LED。
在这里插入图片描述

可以找到这三个LED最后是连接到是stm32F407VET6上的PE8-PE10引脚上。

在这里插入图片描述

接下来就可以进行代码控制了,那么就需要去了解控制该引脚的寄存器应该如何配置。
与IO配置常用的8个寄存器: MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR 、AFRH 和 AFRL。寄存器的介绍与配置可以在stm34F4中文参考手册中进行查看。下面是我认为比较重要的。

2.1 I/O相关寄存器简单介绍与分类

上面所说的8个与IO相关的寄存器主要可以分为三类:端口控制寄存器、端口数据寄存器、复用功能输入/输出寄存器。

2.1.1 I/O 端口控制寄存器

每个 GPIO 有 4 个 32 位存储器映射的控制寄存(GPIOx_MODER、GPIOx_OTYPER、 GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16个 I/O.

GPIOx_MODER 寄存器用于 选择 I/O 方向(输入、输出、AF、模拟)。

GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)速度.无论采用哪种 I/O 方向都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存位。无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉

2.1.2 I/O 端口数据寄存器

每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器GPIOx_IDRGPIOx_ODR)。
GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。

2.1.3 I/O 复用功能输入/输出

有两个寄存器可用来从每个 I/O 可用的 16 个复用功能输入/输出中进行选择。借助这些寄存器,可根据应用程序的要求将某个复用功能连接到其它某个引脚。这意味着可使用 GPIOx_AFRLGPIOx_AFRH 复用功能寄存器在每个 GPIO 上复用多个可用的外设功能。这样一来,应用程序可为每个 I/O 选择任何一个可用功能。由于 AF 选择信号由复用功能输入和复用功能输出共用,所以只需为每个 I/O 的复用功能输入/输出选择一个通道即可。

注意: 对于每个 I/O 而言,应用程序一次只能为其选择一个可用的外设功能。

另外:所有端口都具有外部中断功能。要使用外部中断线,必须将端口配置为输入模式–这就是为什么我们在进行外部中断实验的时候一般都是使用的按键。

2.2 GPIO寄存器

2.2.1 GPIO 端口模式寄存器 (GPIOx_MODER)

在这里插入图片描述

可以通过上面的32位的端口模式寄存器可以知道,每一个IO口都通过这个寄存器的两个位来控制I/O的方向模式

2.2.2 GPIO 端口输出类型寄存器 (GPIOx_OTYPER)

在这里插入图片描述

在这里插入图片描述

GPIOx_OTYPER也是一个32位的寄存器,
但是一个组最多16个GPIO,所以只使用了低16位,用这个寄存器来配置I/O端口的输出类型

2.2.3 GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR)

在这里插入图片描述

GPIOx_OSPEEDR端口输出速度寄存器通过两位来配置I/O的输出速度。

2.2.4 GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR)

在这里插入图片描述

用来配置I/O的上拉与下拉。

2.2.5 GPIO 端口输入数据寄存器 (GPIOx_IDR)

在这里插入图片描述

输入数据寄存器,用于存储IO口的输入的数据值,注意这个寄存器只能读,不能进行写操作。

2.2.6 GPIO 端口输出数据寄存器 (GPIOx_ODR)与GPIO 端口置位/复位寄存器 (GPIOx_BSRR)

在这里插入图片描述

在这里插入图片描述

2.2.7 GPIO 复用功能低位寄存器 (GPIOx_AFRL)

在这里插入图片描述

配置复用功能 I/O

2.2.8 GPIO 复用功能高位寄存器 (GPIOx_AFRH)

在这里插入图片描述

三、 LED 初始化配置

GPIO 相关的函数和定义分布在固件库文件 stm32f4xx_gpio.c 和头文件 stm32f4xx_gpio.h 文件中。

在固件库开发中,操作四个配置寄存器初始化 GPIO 是通过 GPIO 初始化函数完成:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

第一个参数是用来指定需要初始化的 GPIO 对应的 GPIO 组;第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。
双击入口参数类型 GPIO_InitTypeDef
后右键选择“Go to definition of …”可以查看结构体的定义.

通过不断追踪GPIO_Init()中的各个参数,你就可以知道关于这个GPIO的配置都与我们前面提到的寄存器相关。

但是,仅仅对GPIO进行配置是远远不行的,还要记得整个单片机的心脏——时钟,所以我们需要将该引脚口所在的时钟线使能。
在这里插入图片描述

可以知道PORTE是使用的AHB1的时钟线,所以使能AHB1时钟。

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE)

LED 完整配置代码

lec.cvoid LED_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);//E8910GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//开漏只能输出高电平,LED需要低电平点亮GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(GPIOE,&GPIO_InitStructure);GPIO_SetBits(GPIOE,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);//输出为0,点亮LED
}

led.h

#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif

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

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

相关文章

AGI魔盒,会放出冥王PLUTO还是阿童木?

人机共生,是科幻作品永恒的主题。其中,《冥王PLUTO》可能是最早探讨人类与机器人如何在冲突中共存的漫画作品。 如果说阿童木是人机共生的“和平使者”,启蒙了几代人对机器人的信任和热爱,那么冥王PLUTO就是阿童木的反面,一个心怀…

基于ssm网络安全宣传网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网络安全宣传网站就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

2023-12-14 使用Qt画一条曲线(AI辅助)

点击 <C 语言编程核心突破> 快速C语言入门 使用Qt画一条曲线 前言一、Qchart简介二、代码总结 前言 要解决问题: 有一个函数, 生成一些点, 想画一条曲线. 想到的思路: 这个用Qchart比较简单. 其它的补充: 需要稍许配置 一、Qchart简介 QChart是Qt中的一个图表控件&a…

记录 | mac打开终端时报错:login: /opt/homebrew/bin/zsh: No such file or directory [进程已完成]

mac打开终端时报错&#xff1a;login: /opt/homebrew/bin/zsh: No such file or directory [进程已完成]&#xff0c;导致终端没有办法使用的情况 说明 zsh 没有安装或者是安装路径不对 可以看看 /bin 下有没有 zsh&#xff0c;若没有&#xff0c;肯定是有 bash 那就把终端默…

三层交换机原理与配置

文章目录 三层交换机原理与配置一、三层交换技术概述二、传统的 MLS三、基于CEF 的MLS1、转发信息库&#xff08;FIB&#xff09;2、邻接关系表3、工作原理&#xff1a; 四、三层交换机的配置1、三层交换机配置命令2、三层交换机配置步骤 三层交换机原理与配置 一、三层交换技…

【Hadoop】

Hadoop是一个开源的分布式离线数据处理框架&#xff0c;底层是用Java语言编写的&#xff0c;包含了HDFS、MapReduce、Yarn三大部分。 组件配置文件启动进程备注Hadoop HDFS需修改需启动 NameNode(NN)作为主节点 DataNode(DN)作为从节点 SecondaryNameNode(SNN)主节点辅助分…

如何学习Kubernetes,学习K8S入门教程

学习 Kubernetes&#xff08;K8s&#xff09;确实不容易 你的硬件资源有限时&#xff0c;不过别担心&#xff0c;我帮你理清思路&#xff0c;让你在学习 K8s 的路上更加从容。 1、资源限制下的学习方法 当硬件资源有限时&#xff0c;一个好的选择是使用云服务提供的免费层或者…

✺ch2——OpenGL图像管线

目录 基于C图形应用&#xff06;管线概览OpenGL类型第一个C/OpenGL应用程序◍API (1) GLSL类型着色器——画一个点的程序◍API (2)◍API (3) 栅格化像素操作——Z-buffer算法检测 OpenGL 和 GLSL 错误◍API (4) 从顶点来构建一个三角形场景动画◍API (5) OpenGL某些方面的数值—…

ArcGIS导入excel中的经纬度信息,绘制矢量

1.首先整理坐标信息 2.其次转成2003格式的excel文件 3.导入arcgis&#xff0c;点击右键添加excel数据 4.显示xy数据 5.显示经度和纬度信息 6&#xff1a;点击【地理坐标系】->【World】->【WGS 1984】->【确定】 7.投影带的确定方式&#xff1a; 因为自己一直…

spring 笔记五 SpringMVC的数据响应

文章目录 SpringMVC的数据响应SpringMVC的数据响应方式回写数据 SpringMVC的数据响应 SpringMVC的数据响应方式 页面跳转 直接返回字符串通过ModelAndView对象返回 回写数据 直接返回字符串返回对象或集合 返回字符串形式 直接返回字符串&#xff1a;此种方式会将返回的字符…

腾讯云Elasticsearch Service产品体验

基本介绍 产品概述 腾讯云 Elasticsearch Service&#xff08;ES&#xff09;是云端全托管海量数据检索分析服务&#xff0c;拥有高性能自研内核&#xff0c;集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群&#xff0c;也支持免运维、自动弹性、按需…

Clickhouse RoaringBitmap

https://blog.csdn.net/penriver/article/details/119736050 https://juejin.cn/post/7179956435806076988 BitMap适合连续密集的正整数存储&#xff0c;对于稀疏的正整数存储&#xff0c;其性能在很多时候是没办法和int数组相比的&#xff0c;尤其是正整数跨度较大的场景&…

架构设计系列之常见架构(一)

本部分对常见架构进行简单的说明。 一、三层架构之经典 MVC 经典的 MVC 架构&#xff08;Model-View-Controller&#xff09;架构是软件系统架构设计中的经典&#xff0c;它将应用程序分为三个主要部分&#xff1a; 模型&#xff08;Model&#xff09;视图&#xff08;View&…

智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.差分进化算法4.实验参数设定5.算法结果6.…

DC-3靶场

DC-3 DC-3靶场链接&#xff1a;https://download.vulnhub.com/dc/DC-3-2.zip 下载后解压会有一个DC-3.ova文件&#xff0c;直接在vm虚拟机点击左上角打开-->文件--.选中这个.ova文件就能创建靶场&#xff0c;kali和靶机都调整至NAT模式 首先进行主机发现&#xff1a; arp…

基于java的医院住院管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

Vue学习笔记-Vue3中的customRef

作用 创建一个自定义的ref&#xff0c;并对其依赖项的更新和触发进行显式控制 案例 描述&#xff1a;向输入框中输入内容&#xff0c;在下方延迟1秒展示输入内容 代码&#xff1a; <template><input type"text" v-model"keyword"><h3&…

网络安全项目实战(四)--报文检测

8. TCP/UDP 段 目标 了解 TCP 段头的组织结构了解 UDP 段头的组织结构掌握 TCP/UDP 段的解析方式 8.1. UDP 段格式 下图是UDP的段格式&#xff08;该图出自[TCPIP]&#xff09;。 8.2. UDP头部 //UDP头部&#xff0c;总长度8字节// /usr/include/linux/udp.h struct udphdr …

自定义Axure元件库及原型图泳道图的绘制(详细不同类的案例)

目录 前言 一.自定义元件库 1.1 自定义元件库的作用 1.2 自定义元件的操作 二.流程图 2.1 流程图的作用 2.2 绘制流程图 2.3 简易流程图案例 三.泳道图 3.1 泳道图的作用 3.2 流程图和泳道图的区别 3.3 绘制泳道图 四.绘制前的准备 五.案例 4.1 门诊模块案例 4.2 …

聚观早报 |iOS17.3引入设备被盗保护;iPhone16或调整设计

【聚观365】12月14日消息 iOS17.3引入设备被盗保护 iPhone16或调整设计 马斯克星链网络使用量飙升 华为鸿蒙智行App正式上线 特斯拉人形机器人Optimus二代上线 iOS17.3引入设备被盗保护 苹果向iPhone用户推送了iOS17.3开发者预览版Beta更新&#xff0c;本次更新距离上次发…