0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:博客园 作者:只为一眼红颜 2020-09-25 13:48 次阅读

一、什么是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);
}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5027

    浏览量

    117710
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348720
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50562
收藏 人收藏

    评论

    相关推荐

    STM32 GPIO的工作模式

    在之前围绕STM32GPIO的基本结构进行了介绍,图1为STM32的5V容忍的GPIO口内部基本结构图,图2为
    发表于 04-14 10:40 1377次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>的工作模式

    【问题汇总】STM32关于GPIO的问题

    STM32 关于GPIO的问题集锦1、关于GPIO问:STM32的IO
    发表于 03-13 17:23

    介绍STM32GPIO

    本文中主要介绍STM32GPIO,在最后简单介绍下PIC的IO设置。基本功能需求我们在使用STM32
    发表于 11-24 06:05

    寄存器操作GPIO介绍

    寄存器操作GPIO1.ARM 介绍2.开发板的介绍2.1软件安装2.2工程建立总线架构和时钟树GPIO
    发表于 12-10 06:32

    STM32F10xxx使用教程之GPIO应用示例资料免费下载

    这篇应用笔记是为了提供关于STM32F10xxx GPIO外设的使用的应用示例。这篇文档,它相关的固件库,和其他这样的应用笔记是为和STM32F10xxx固件库配套而写的。 这节
    发表于 08-29 14:27 19次下载
    <b class='flag-5'>STM32</b>F10xxx使用教程之<b class='flag-5'>GPIO</b>应用示例资料免费下载

    关于STM32GPIO配置不同输出速度会有什么影响?

    STM32GPIO配置不同输出速度会有什么影响?
    的头像 发表于 03-01 11:53 1.2w次阅读
    <b class='flag-5'>关于</b><b class='flag-5'>STM32</b>的<b class='flag-5'>GPIO</b>配置不同输出速度会有什么影响?

    STM32GPIO使用

    分享本文,介绍STM32GPIO使用。
    的头像 发表于 09-03 09:28 4063次阅读

    STM32单片机GPIO学习

    问题咨询及项目源码下载请加群:群名:IT项目交流群群号:245022761STM32学习篇2: GPIO引脚的控制============stm32 GPIO========
    发表于 11-14 11:36 24次下载
    <b class='flag-5'>STM32</b>单片机<b class='flag-5'>GPIO</b>学习

    STM32GPIO工作原理详解

    文章来源:微信公众号:STM32嵌入式开发STM32GPIO介绍 GPIO是通用输入/输出端口的简称,是
    发表于 11-29 11:21 4次下载
    <b class='flag-5'>STM32</b>中<b class='flag-5'>GPIO</b>工作原理详解

    stm32 GPIO使用总结

    stm32 GPIO使用总结
    发表于 12-01 11:21 8次下载
    <b class='flag-5'>stm32</b> <b class='flag-5'>GPIO</b>使用总结

    6 . STM32 GPIO介绍

    GPIO是什么?GPIO (general purpose intput output) ,是通用输入输出端口的简称,可以通过软件来控制其输入和输出。STM32 芯片的GPIO 引脚与
    发表于 12-24 19:08 2次下载
    6 . <b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b><b class='flag-5'>介绍</b>

    STM32-GPIO详解

    STM32-GPIO配置介绍typedef struct { uint32_t GPIO_Pin; GPIOMode_TypeDef GPIO
    发表于 12-24 19:12 15次下载
    <b class='flag-5'>STM32-GPIO</b>详解

    关于STM32 GPIO的配置等问题

    关于STM32 GPIO的配置等问题一、GPIO的基本结构图示二、模式直接上图:图表数据解析:三、配置等问题问题一、GPIO的基本结构图示提
    发表于 01-13 16:22 3次下载
    <b class='flag-5'>关于</b><b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b>的配置等问题

    STM32学习笔记---GPIO

    STM32的学习笔记—GPIO我使用的是STM32F401ZGT6,有7组IO口,每组16个引脚,共112个引脚。因为太菜了,确实容易出错,还请赐教参考官方文档:八种IO口模式区别结构原理该单片机
    发表于 01-13 16:31 6次下载
    <b class='flag-5'>STM32</b>学习笔记---<b class='flag-5'>GPIO</b>

    STM32GPIO在实际开发设计的使用配置和技巧

    一、前言 本篇开始对STM32GPIO在实际开发设计中的使用配置和技巧进行探讨,可以先去回顾下之前介绍GPIO的相关理论基础知识包括基本结构,工作模式和寄存器原理。 了解过
    的头像 发表于 06-22 10:22 519次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>GPIO</b>在实际开发设计的使用配置和技巧