什么是GPIO? STM32中关于GPIO口的介绍

发布者:CrystalBreeze最新更新时间:2024-03-07 来源: elecfans关键字:GPIO  STM32  通用输入输出口 手机看文章 扫描二维码
随时随地手机看文章

一、什么是GPIO?

GPIO的英文全称是General-Purpose IO ports,也就是通用输入输出口。

嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号。并且,许多设备或电路只要求有开/关两种状体就够了,比如LED的亮与灭。对这些设备的控制,使用传统的串口或者并口就显得比较复杂,所以,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。

一个GPIO端口至少需要两个寄存器,一个做控制用的“通用IO端口控制寄存器”,还有一个是存放数据的“通用I/O端口数据寄存器”。数据寄存器的每一位是和GPIO的硬件引脚对应的,而数据的传递方向是通过控制寄存器设置的,通过控制寄存器可以设置每一位引脚的数据流向。


二、STM32中关于GPIO口的介绍

在STM32中每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。

根据数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位可以由软件分别配置成多种模式。

─ 输入浮空

─ 输入上拉

─ 输入下拉

─ 模拟输入

开漏输出

─ 推挽式输出

─ 推挽式复用功能

─ 开漏复用功能

三、常用GPIO口寄存器描述

1、端口配置寄存器(GPIOx_CRL,GPIOx_CRH)

GPIOx_CRL和GPIOx_CRH分别对应GPIO口的低8位和高8位输入输出口,每个寄存器的4位对应GPIO口的一个端口的配置模式,其中4位中的低两位代表配置为输入还是输出模式,记为MODEy[1:0],具体的模式配置情况如下:

00:输入模式(复位后的状态)

01:输出模式,最大速度10MHz

10:输出模式,最大速度2MHz

11:输出模式,最大速度50MHz

高两位通常对应于什么输入输出方式,记为CNFy[1:0],具体的模式配置情况如下:

在输入模式(MODE[1:0]=00):

00:模拟输入模式

01:浮空输入模式(复位后的状态)

10:上拉/下拉输入模式

11:保留

在输出模式(MODE[1:0]>00):

00:通用推挽输出模式

01:通用开漏输出模式

10:复用功能推挽输出模式

11:复用功能开漏输出模式

2、端口输入数据寄存器(GPIOx_IDR)

位31:16 保留,始终读为0。

位15:0 端口输入数据,这些位为只读并只能以字(16位)的形式读出。读出的值为对应I/O口的状态。

3、端口输出数据寄存器(GPIOx_ODR)

位31:16 保留,始终读为0。

位15:0 端口输出数据,这些位可读可写并只能以字(16位)的形式操作。

4、端口位设置/清除寄存器(GPIOx_BSRR)

5、端口位清除寄存器(GPIOx_BRR)

四、一个简单的关于寄存器的操作

MiniSTM32关于状态指示灯的连接

由图示可以看出DS0和DS1分别接在GPIOA8和GPIOD2上,由此可以对寄存器的操作来实现流水灯实验

void LED_Init(void)
{
RCC->APB2ENR |= 1 << 2; //使能PORTA时钟
RCC->APB2ENR |= 1 << 5; //使能PORTB时钟
GPIOA->CRH &= 0xFFFFFFF0;//清空PA8
GPIOA->CRH |= 0x00000003;//将PA8设置成通用推挽输出模式
GPIOA->ODR |= 1 << 8;       
GPIOD->CRL &= 0xFFFFF0FF;//清空PD2
GPIOD->CRL |= 0x00000300;//将PD2设置成通用推挽输出模式
GPIOD->CRL |= 1 << 2;
}

int main(void)
{
Stm32_Clock_Init(9); //初始化时钟
delay_init(72); //延时初始化
LED_Init(); //配置相应寄存器

while(1)
{
LED0 = 0; //点亮DS0
LED1 = 1;
delay_ms(500);
LED0 = 1; //点亮DS1
LED1 = 0;
delay_ms(500);
}

}


关键字:GPIO  STM32  通用输入输出口 引用地址:什么是GPIO? STM32中关于GPIO口的介绍

上一篇:STM32单片机I/O的工作模式
下一篇:STM32系统中如何数据掉电保护

推荐阅读最新更新时间:2024-11-13 07:28

STM32+ESP8266获取网络时间和天气
先给出两个可以获取天气和时间的网站 https://www.seniverse.com/docs 可以获取天气 http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&HTTP/1.1 可以获取时间 接下来简单说说怎么通过AT指令的方式去获取天气及时间信息 1:连网 首先,ESP8266肯定是需要连上网才能访问这些信息。所以,第一步要做的就是让ESP8266连接上wifi热点,可以是路由器,也可以是手机热点。下面写出重要的步骤 1:使用串口发送指令AT+CWMOD
[单片机]
STM32 控制舵机, 动态调整PWM
伺服电机拥有更大的扭矩,可以移动沉重的负荷。 深受玩具制造商的欢迎。很多玩具都有伺服电机和直流电机 交流伺服电机可以移动更沉重的负载,一般在工业应用。直流伺服电机最多用于搬动小物品。 span font-size:14px;font-variant-numeric:normal;font-variant-east-asian:normal;line-height:18px;white-space:normal;background-color:#ffffff; = style= overflow-wrap: break-word; color: rgb(46, 48, 51); font-family: 宋体, Arial; t
[单片机]
<font color='red'>STM32</font> 控制舵机, 动态调整PWM
基于STM32的重力感应无线智能遥控小车设计
引言 随着社会进步,电子消费产品的需求越来越高,遥控智能车辆以及在智能化车辆基础上开发出来的产品已广泛应用到自动化物流运输等领域。目前,遥控智能车辆大多采用无线传输方式,而无线传输逐渐取代有线传输不仅是因为“无线”,更因为在安装、增减节点方面都比有线方式方便、快捷,因此得到了广泛的应用。 本设计首先采集手持遥控端的倾角信息并进行处理、生成指令,然后无线发送给智能小车,赋予智能小车更灵活的运动状态和更宽广的运动范围。设计灵活,操作方便,控制稳定,制作成本低,可应用于视线可观察但人体涉及不到的区域,可制作成高端智能玩具,或应用于工业控制,与实际相结合,有良好的现实意义和市场经济价值。 1、系统硬件电路设计 采用整体设计的方法进行
[单片机]
基于<font color='red'>STM32</font>的重力感应无线智能遥控小车设计
STM32HAL库ADC实验(二)——连续采样模式打印电压值
int main(void) { /* USER CODE BEGIN 1 */ uint16_t adcData; float voltage; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /*
[单片机]
STM32HAL库ADC实验(二)——连续采样模式打印电压值
嵌入式stm32学习:DMA-存储到存储
main.c #include stm32f4xx.h #include ./led/bsp_led.h /* 相关宏定义,使用存储器到存储器模式必须使用DMA2 */ #define DMA_STREAM DMA2_Stream0 #define DMA_CHANNEL DMA_Channel_0 #define DMA_STREAM_CLOCK RCC_AHB1Periph_DMA2 #define DMA_FLAG_TCIF DMA_FLAG_TCIF0 #define BUFFER_SIZE 32 #define TIMEOUT_MAX 1
[单片机]
STM32 BIT_BAND 位段位带别名区使用入门
1. 什么是位段、位带别名区? 2. 它有什么好处? 答1: 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作, MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ; 就是这样把P1口的第三个脚(BIT2)置0置。 而现在STM32的位段、位带别名区就为了实现这样的功能。 对象可以是SRAM,I/O外设空间。实现对这些地方的某一位的操作。 它是这样的。在寻址空间(32位地址是 4GB )另一地方,取个别名区空间,从这地址开始处,每一个字(32BIT) 就对应SRAM或I/O的一位。 这样呢,1MB SRAM就
[单片机]
<font color='red'>STM32</font> BIT_BAND 位段位带别名区使用入门
基于STM32数据传输转换接口器的设计与实现
引言 在当今高速实时数字信号处理系统中,涉及的数据对象趋于多样化,这些数据通常采用不同的电气接口,具有不同的传输速率、传输方向。现代机电一体化控制设备中,如工业加注机、设备清洗机控制系统基本是PLC与显示屏加仪表等构成的小型计算机控制系统。但现在工业已经进入了数字化、智能化时代,进入物联网领域,要求信息共享,生产过程信息化、网络化管理,提高生产效率,降低人员劳动强度。所以要满足上述需求,保留原有设备及控制系统,进行新老交替,则需要在原有控制柜基础上增加数据交换接口模块,如图1所示。基于此,我们以数字信号处理器STM32为核心,设计了适于多种标准接口数据传输接口器,以实现系统的数据交互。 图1具有数据传输交换接口器的控制系统框架
[单片机]
基于<font color='red'>STM32</font>数据传输转换接口器的设计与实现
工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯(四)
补充一些硬件知识      SEGGER 给出的Jlink引脚图      开发板上的连接图      标准的JTAG连接图,供对照参考。   调试方式既可以用JTAG,也可以用SW。   以下是转载:   SWD 仿真模式概念简述   先所说 SWD 和传统的调试方式有什么不一样:   首先给大家介绍下经验之谈:   (一): SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。 基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。   (二): 在大家
[模拟电子]
工程师<font color='red'>STM32</font>单片机学习基础手记(4):用PWM实现荧火虫灯(四)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved