stm32——GPIO

目录

一、GPIO外设的概述

1.GPIO的概念

GPIO(General Purpose Input/Output)外设是微控制器中最基本且最通用的接口,用于与外部设备进行交互。GPIO引脚的核心功能是作为通用的数字输入或输出,可以通过软件配置为多种工作模式,以满足不同的应用需求,GPIO引脚需要和外设连接在一起的,就可以和外设实现通信以及采集数据等功能。

2.GPIO的定义

指的是对芯片的某个引脚进行高低电平的输出,以及可以去检测某个引脚的电平状态。一般电平采用都是TTL电平信号,TTL电平信号规定:+5V等价于逻辑"1",0V等价于逻辑"0"。

电平其实有一个电平范围:>2.4V就表示高电平,<0.4V就表示低电平。

3.引脚的布局

电源引脚 :VCC、VDD、VSS、VDDA、VSSA、VREF+等属于电源引脚

晶振引脚 :PC14、PC15、PH0、PH1就属于晶振引脚,也可以作为其他的功能使用

复位引脚 :NRST属于复位引脚

BOOT引脚 :BOOT0是专用引脚,BOOT1就属于功能引脚 (设置芯片的自举模式)

GPIO引脚 :芯片一共有144引脚,但是GPIO引脚有114个

下载引脚 :PA13、PA14、PB3、PB4等都属于下载引脚(JTAG、SWD)

4.引脚的命名

一般IO口的命名是由P(Pin)开头,分为很多组(端口),以字母AH来命名,每个组(端口)有16个引脚,引脚的编号为015,所以如端口A引脚范围: PA0 ~ PA15 端口B引脚范围:PB0~PB15...

51单片机也有IO口,一般8051有40个引脚,其中有1个复位引脚,2个晶振引脚,2个电源引脚,3个存储选择引脚,剩下的32个引脚作为IO口,8051也把32个IO口进行分组,分为4个端口,每个端口有8个引脚,端口是以数字03进行区分,每个端口的8个引脚是以数字07进行区分,比如 P00 ~ P07 P10 ~ P17 P20 ~ P27 P30 ~ P37

5.引脚的功能

需要注意:芯片的引脚有很多的功能,一般默认的功能都是作为GPIO(输入输出),但是引脚也有其他的功能,被称为"第二功能",只有在使用ADC通道和DAC需要把引脚设置模拟模式,其他情况下想要把引脚当做别的功能使用,需要把引脚设置复用模式。注意:如果想要了解引脚的功能,应该查阅芯片的数据手册!!!

注意:引脚在芯片复位之后的默认功能一般都是GPIO功能,但是并不绝对,所以用户在使用后任何一个引脚的时候都应该查阅芯片数据手册.

二、GPIO外设的使用

想要学习硬件开发,一般都是从点亮LED开始,主要是以基础外设作为入门,掌握外设的控制流程。

(1)查看原理图,找到控制发光二极管的芯片的IO口,LED0 -- PF9引脚,其他引脚类似!!

(2)分析原理图,理解硬件的控制原理(复杂外设还需要结合数据手册),输出低电平就亮

(3)程序设计,根据ST公司提供的函数库(标准外设库+HAL库)的帮助手册学习开发流程


请问:能否根据ST公司提供的外设的初始化和配置的流程,完成外设的初始化和配置,就是能不能写代码? 回答:写不出来 ST公司也怕你写不出来,所以ST公司帮用户写了每个外设的代码。


三、GPIO外设的细节分析

(1)定义GPIO外设的和初始化相关的结构体变量,结构体类型是定义在stm32f4xx_gpio.h

(2)想要使用GPIO外设,必须提前打开GPIO端口外设时钟,需要使用ST提供的函数,如:

打开外设时钟的原因:因为STM32属于低功耗的MCU,而为了降低功耗,所以STM32的MCU在复位之后默认会关闭绝大多数的外设的时钟,所以用户想要使用MCU内部的某个外设,就必须打开该外设的时钟(clock)。

想要控制硬件,必须控制硬件的寄存器,而从数字电路的角度讲,寄存器的作用是用于暂存一组二进制数据,比如32bit的寄存器可以暂存32bit的数据,原因就是寄存器内部是由一组触发器级联组成的,触发器可以暂存1bit数据(0 or 1),而触发器在数字电路属于时序逻辑电路。

时钟相当于外设的开关,不打开时钟,则晶振产生的振荡信号就无法输入到MCU内部的外设中,则没有时钟信号,触发器无法触发,则触发器无法锁存数据,而寄存器是由N个触发器组成,所以寄存器就无法工作,而控制硬件,必须通过寄存器实现。

STM32的MCU内部有很多外设,每个外设的作用和性能都各不相同,ST公司为了降低芯片功耗,把不同性能的外设挂载在不同性能的总线上,需要掌握3条总线:AHB高级高性能总线(总线频率是168MHZ)、APB1高级外设总线(总线频率是42MHZ)、APB2高级外设总线(总线频率是84MHZ)。

而MCU内部的外设的性能不同,所以就需要把外设挂载到对应的总线,利用总线对外设进行控制。

总线和外设的关系就相当于高速公路和汽车的关系,高速公路一般分为快慢车道,每个车道的车速不同,如果汽车的性能较低,则在慢车道行驶,如果汽车的性能较强,则在快车道行驶。


(3)打开GPIO外设的时钟之后,可以对GPIO外设的初始化结构体中的成员进行赋值,如:

设置GPIO引脚的编号

设置GPIO引脚的模式


设置GPIO引脚的输出类型

设置GPIO引脚的内部电阻

设置GPIO引脚的输出速度

输出速度指的是引脚电平的翻转速度,如果选择高速,则会增加功耗和噪声,如果不知道选择哪种,则选择高速即可。

(4)设置好了GPIO结构体的各个成员的值,需要把结构体中的值写入到GPIO端口寄存器!

相关推荐
啊阿狸不会拉杆1 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路1 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
△曉風殘月〆3 小时前
Visual Studio中的常用调试功能(下)
c++·ide·visual studio·调试
Kisorge3 小时前
【电机参数】电压、电流、转速标幺化推算过程
stm32
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习
第二层皮-合肥4 小时前
FPGA实现ETH接口
单片机·嵌入式硬件·fpga开发
anghost1504 小时前
基于单片机的智能声控窗帘
单片机·嵌入式硬件·mongodb
yiqiqukanhaiba6 小时前
STM32学习笔记13-通信协议I2C&MPU6050&I2C软件控制
笔记·stm32·学习
minji...6 小时前
C++ string类(STL简介 , string类 , 访问修改字符)
开发语言·c++