stm32学习笔记---GPIO口操作

一、GPIO的基本概念及寄存器介绍

1、GPIO接口简介

通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。
STM32芯片的 GPIO 被分成很多组,每组最多有 16个引脚,如型号为 STM32F407IGT6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOI共 9组 GPIO,芯片一共 176 个引脚,其中 GPIO就占了一大部分,所有的 GPIO引脚都有基本的输入输出功能。
stm32学习笔记---GPIO口操作_第1张图片

2、GPIO功能复用

stm32学习笔记---GPIO口操作_第2张图片

3、GPIO寄存器介绍

STM32F4-GPIO常用寄存器

  • 4个32位配置寄存器
    GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR GPIOx_PUPDR
  • 2个32位数据寄存器
    GPIOx_IDR 、GPIOx_ODR
  • 1 个32 位置位 / 复位寄存器
    GPIOx_BSRR
  • 2 个 32 位复用功能配置寄存器
    GPIOx_AFRH 、GPIOx_AFRL

注:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能

3.1、GPIO寄存器MODER

stm32学习笔记---GPIO口操作_第3张图片

  • GPIO 端口模式寄存器 (GPIOx_MODER) (x = A…I)
  • 偏移地址: 0x00
    复位值:
    ● 0xA800 0000(端口 A)
    ● 0x0000 0280(端口 B)
    ● 0x0000 0000(其它端口
    stm32学习笔记---GPIO口操作_第4张图片

3.2、GPIO寄存器OTYPER

在这里插入图片描述
stm32学习笔记---GPIO口操作_第5张图片

  • GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I)
  • 偏移地址: 0x04
    复位值: 0x0000 0000

3.3、GPIO工作原理框图

stm32学习笔记---GPIO口操作_第6张图片

3.4、GPIO寄存器OSPEEDR

stm32学习笔记---GPIO口操作_第7张图片
stm32学习笔记---GPIO口操作_第8张图片

  • GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)
  • 偏移地址:0x08
    复位值:
    ● 0x0000 00C0(端口 B)
    ● 0x0000 0000(其它端口)

3.5、GPIO寄存器PUPDR

stm32学习笔记---GPIO口操作_第9张图片
stm32学习笔记---GPIO口操作_第10张图片

  • GPIO 端口上拉/ 下拉寄存器 (GPIOx_PUPDR) (x = A…I/)
  • 偏移地址:0x0C
  • 复位值:
    ● 0x6400 0000(端口 A)
    ● 0x0000 0100(端口 B)
    ● 0x0000 0000(其它端口)

3.6、GPIO寄存器IDR

在这里插入图片描述
在这里插入图片描述

  • GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A…I)
  • 偏移地址:0x10
  • 复位值:0x0000 XXXX(其中 X 表示未定义)

3.7、GPIO寄存器ODR

在这里插入图片描述
stm32学习笔记---GPIO口操作_第11张图片

  • GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A…I)
  • 偏移地址:0x14
  • 复位值:0x0000 0000

3.8、GPIO寄存器BSRR

stm32学习笔记---GPIO口操作_第12张图片
stm32学习笔记---GPIO口操作_第13张图片

  • GPIO 端口置位/ 复位寄存器 (GPIOx_BSRR) (x = A…I)
  • 偏移地址:0x18
  • 复位值:0x0000 0000

3.9、GPIO寄存器AFRL

stm32学习笔记---GPIO口操作_第14张图片
stm32学习笔记---GPIO口操作_第15张图片

  • GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
  • 偏移地址:0x20
  • 复位值:0x0000 0000

3.10、GPIO寄存器AFRH

stm32学习笔记---GPIO口操作_第16张图片
stm32学习笔记---GPIO口操作_第17张图片

  • GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
  • 偏移地址:0x24
  • 复位值:0x0000 0000

二、照亮电子世界的那盏灯——LED寄存器版

1、硬件原理图分析

stm32学习笔记---GPIO口操作_第18张图片
stm32学习笔记---GPIO口操作_第19张图片

2、使能GPIO的时钟

STM32 外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开。
所有的 GPIO 都挂载到 AHB1 总线上,所以它们的时钟由 AHB1外设时钟使能寄存器(RCC_AHB1ENR)来控制
stm32学习笔记---GPIO口操作_第20张图片
使能GPIOF的时钟
stm32学习笔记---GPIO口操作_第21张图片

  • RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)
  • 偏移地址:0x30
  • 复位值:0x0010 0000
  • 访问:无等待周期,按字、半字和字节访问。

3、编程步骤分析

开启GPIOF的时钟

   RCC_AHB1ENR |= (1<<5);

配置PF7, PF8, PF9, PF10接口

  GPIOF->MODER |= (1<<14)|(1<<16)|(1<<18) )|(1<<20);   //设置PF7, PF8, PF9, PF10为通用输出模式
  GPIOF->OTYPER = 0x0;                                      		  //设置PF7, PF8, PF9, PF10为通用推挽输出
  GPIOF->OSPEEDR = 0x0;                                  		 //设置输出速度为低速

控制LED;

   GPIOF->BSRR = (1<<23)|(1<<24)|(1<<25)|(1<<26);   //复位PF7, PF8, PF9, PF10 既点亮LED
   GPIOF->BSRR = (1<<7)|(1<<8)|(1<<9)|(1<<10);         //置位PF7, PF8, PF9, PF10既熄灭LED

4、实例操作

4.1 、新建工程

1、打开STM32CubeMx,新建工程
stm32学习笔记---GPIO口操作_第22张图片
2、选择芯片,双击确认
stm32学习笔记---GPIO口操作_第23张图片
3、管脚配置,搜索相应管脚
stm32学习笔记---GPIO口操作_第24张图片
4、左键对应管脚,选择GPIO_Output
stm32学习笔记---GPIO口操作_第25张图片
5、导出工程
stm32学习笔记---GPIO口操作_第26张图片
stm32学习笔记---GPIO口操作_第27张图片
stm32学习笔记---GPIO口操作_第28张图片
stm32学习笔记---GPIO口操作_第29张图片

4.2、打开工程

1、点击open project,会自动调用打开keil
stm32学习笔记---GPIO口操作_第30张图片
2、编译一下工程
stm32学习笔记---GPIO口操作_第31张图片
stm32学习笔记---GPIO口操作_第32张图片
3、配置查看
stm32学习笔记---GPIO口操作_第33张图片
4、MX_GPIO_Init()对GPIO模式进行封装,鼠标右键,跳转查看
stm32学习笔记---GPIO口操作_第34张图片
默认设置
stm32学习笔记---GPIO口操作_第35张图片
如果需要配置可以在CubeMx里进行
stm32学习笔记---GPIO口操作_第36张图片

4.3、功能代码

stm32学习笔记---GPIO口操作_第37张图片
编译程序,烧写代码,主控板需要开机
stm32学习笔记---GPIO口操作_第38张图片

三、照亮电子世界的那盏灯——LED库函数版

1、库函数

stm32学习笔记---GPIO口操作_第39张图片

2、库函数控制代码

stm32学习笔记---GPIO口操作_第40张图片

3、功能代码

stm32学习笔记---GPIO口操作_第41张图片

四、按键

1、硬件原理图分析

stm32学习笔记---GPIO口操作_第42张图片

2、CnbeMx配置

stm32学习笔记---GPIO口操作_第43张图片

3、查看配置

stm32学习笔记---GPIO口操作_第44张图片

4、功能代码

stm32学习笔记---GPIO口操作_第45张图片

你可能感兴趣的:(stm32,单片机,物联网)