博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.2.1简单介绍GPIO
阅读量:37441 次
发布时间:2020-12-04

本文共 3144 字,大约阅读时间需要 10 分钟。

目录


GPIO简介

        GPIO是通用型输入输出的简称,简单的说其实就是STM32单片机额的可控制引脚STM32的GPIO引脚与外部设备连接起来,实现外部通信,控制以及数据采集的功能;GPIO被分为很多组,每组有16个引脚编号为0~15,例如STM32G030C8来说,引脚分为了GPIOA,GPIOB,GPIOC,GPIOD,GPIOF,以及其他引脚;所有的GPIO引脚都具备基本输入输出功能。

        最基本的输出功能由STM32控制引脚输出高、低电平,实现开关控制;

        最基本的输入功能是检测外部电平,通过引脚上电平的高低来确定按键是否被正常按下。

GPIO硬件解析

        STM32芯片GPIO接口内部原理

      

 注释:

I/O引脚:接收外部发出的信号或者向外部发出信号

保护二极管:

        VDD:用来限制IO引脚输入或输出过高电压,当输入或输出电压过高时,保护二极管VDD则导通

        VSS:同VDD,但是他的作用是当输入或输出电压过低时,保护二极管VSS导通

   上下拉电阻:

        当VDD开关处于闭合状态,VSS开关处于打开状态时,整个电路处于上拉输入状态

        当VDD开关处于打开状态,VSS开关处于闭合状态时,整个电路处于下拉输入状态

        当VDD开关处于打开状态,VSS开关处于打开状态时,整个电路处于浮空输入状态

        通常情况下设置模拟输入模式或者复用功能输入模式,VDD开关和VSS开关均设置为打开状态

P-MOS、N_MOS:

        P-MOS、N-MOS在这里用于控制输出状态,分别为开漏输出和推挽输出

        当电路处于推挽输出状态时P-MOS、N-MOS均处于有效电路,且P-MOS 输出0时电路导通, N-MOS 输出1时导通,反之不成立

        当电路处于开漏输出状态时P-MOS处于失效状态,且N-MOS输出1时处于导通状态

 GPIO模式

typedef enum { 	GPIO_Mode_AIN = 0x00,          // 模拟输入 	GPIO_Mode_IN_FLOATING = 0x04,  // 浮空输入 	GPIO_Mode_IPD = 0x28,          // 下拉输入 	GPIO_Mode_IPU = 0x48,          // 上拉输入 	GPIO_Mode_Out_OD = 0x14,       // 开漏输出 	GPIO_Mode_Out_PP = 0x10,       // 推挽输出 	GPIO_Mode_AF_OD = 0x1C,        // 复用开漏输出 	GPIO_Mode_AF_PP = 0x18         // 复用推挽输出 } GPIOMode_TypeDef;

输入模式

在输入模式时,施密特触发器打开,输出被禁止,可以挺过输入数据寄存器GPIOx_IDR读取I/O状态,其中输入模式可以氛围上拉、下拉、浮空和模拟输入中,上下拉输入这里就不再解释了;所谓浮空输入就是指输入的电平是不确定的,完全由外部输入所决定,一般外接按键时使用的便是这种输入模式;模拟输入一般使用于ADC采集

输出模式

 输出模式状态下,可以使用输入模式进行输入,二者是不冲突的,在输出模式下,推挽模式时两个MOS管以轮流的方式进行工作,输出寄存器GPIOx_ODR可以控制I/O输出高低电平;当处于开漏模式下,只有N-MOS管处于工作状态输出数据寄存器可以控制I/O输出高阻态或低电平,输出速度可以配置为Low,Higth等四个选项,输出频度越高,则芯片的功耗越大

GPIO常用寄存器介绍

IO端口A时钟使能寄存器(RCC_IOPENR)

偏移地址:0x34

复位值:0x0000 0000

位[31,6]:复位值,必须保持最初始的值

第5位:GPIOFEN:IO端口F使能

第4位:GPIOFEN:IO端口E使能

第3位:GPIOFEN:IO端口D使能

第2位:GPIOFEN:IO端口C使能

第1位:GPIOFEN:IO端口B使能

第0位:GPIOFEN:IO端口A使能

注:这些位是用来设置和清空对应GPIO引脚的分组的

GPIO端口模式寄存器(GPIOx_MODER) (x = A..D,F)

偏移地址: 0x00

复位值:

● 0x2800 0000 端口 A

● 0x0000 0000 其他口

位 2y+1:2y MODERy[1:0]: 端口 x 配置位 (y = 0..15)

这些位可由软件写来配置 I/O 口模式。

00: 输入模式 ( 复位状态 ) 01: 通用输出模式 10: 复用功能模式 11: 模拟模式

GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)

偏移地址:0x04

复位值: 0x0000 0000

位 31:16 保留,必须保持为复位值。

位 15:0 OTy[1:0]: 端口 x 的配置位 (y = 0..15) 这些位可由软件写来配置 I/O 口的输出类型。

0: 推挽输出 ( 复位状态 ) 1: 开漏输出

 GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)

偏移地址:0x08

复位值: 0x0000 0000

位 2y+1:2y OSPEEDRy[1:0]: 端口 x 配置位 (y = 0..15) 、

这些位要由软件写来配置 I/O 口的速度。

x0: 低速 01: 中速 11: 高速

GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)

偏移地址:0x0C

复位值:

● 0x2400 0000 端口A

● 0x0000 0000 其它端口

位 2y+1:2y PUPDRy[1:0]: 端口 x 配置位 (y = 0..15) 这些位由软件写来配置 I/O 口的上拉或下拉。

00: 无上拉和下拉 01: 上拉 10: 下拉 11: 保留

GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)

偏移地址:0x10

复位值: 0x0000 XXXX (X 表明不定 )

 位 31:16 保留,必须保持为复位值。

位 15:0 IDR[15:0]: 端口输入数据 这些位只读。

它们包含相应 I/O 口的输入值。

GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)

偏移地址:0x14

复位值: 0x0000 0000

位 31:16 保留,必须保持为复位值。

位 15:0 ODR[15:0]: 端口输出数据 这些位可由软件读写。

GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)

偏移地址:0x18

复位值: 0x0000 0000

 

位 31:16 BRy: 端口 x 复位位 y(y = 0..15) 这些位只写。读这些位时返回 0x0000 数值。

0: 对相应的 ODRx 位无影响 1: 复位相应的 ODRx 位

注: 若 BSx 和 BRx 同时设置 , BSx 有优先权。

位 15:0 BSy: 端口 x 设置位 y (y= 0..15) 这些位只写。读这些位时返回 0x0000 数值。

0: 对相应的 ODRx 位无影响 1: 置位相应的 ODRx 位

端口位复位寄存器 (GPIOx_BRR) (x=A..G)

偏移地址:0x28

复位值: 0x0000 0000

 位 31:16 保留 位 15:0 BRy: 端口 x 复位位 y (y= 0 .. 15) 这些位为只写位。

读这些位的返回值为 0x0000

0: 对相应的 ODRx 位无影响 1: 复位相应的 ODRx 位

转载地址:http://tbpowy.baihongyu.com/

你可能感兴趣的文章
Lua(十八)——错误处理,垃圾回收
查看>>
xLua(一)——介绍
查看>>
xLua(二)——下载
查看>>
xLua(三)——在C#中访问Lua代码
查看>>
xLua(四)——C#访问Lua的基本类型
查看>>
xLua(五)——C#访问Lua的table
查看>>
xLua(六)——C#访问Lua的function
查看>>
基础知识——常用单位介绍
查看>>
xLua(七)——Lua访问C#(一)
查看>>
xLua(八)——Lua访问C#(二)
查看>>
Unity中实现解析Json文件
查看>>
Unity自带Json解析库——JsonUtility
查看>>
Unity中使用ViedoPlayer操作视频文件
查看>>
C#中的的输入与输出
查看>>
C#中@符号的作用
查看>>
C#中$符号的作用
查看>>
Mac装windows系统后如何更换触控板设置
查看>>
Windows系统下如何设置软件的快捷键
查看>>
语言中的溢出
查看>>
Unity中实现获取一段时间内移动设备声音的最大音量
查看>>