物联网之STM32开发二(GPIO口操作)

STM32—GPIO操作(基于STM32F051开发板)

内容概述:

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

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

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

初识人机交互——按键

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

内容概述

GPIO接口简介

GPIO功能复用

GPIO寄存器介绍

GPIO接口简介

通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。

GPIO功能复用:《 STM32F0数据手册》可以方便查看(P29-P30)

手册下载链接:https://pan.baidu.com/s/1FTYOR_MuwWyWnZSVDXoPzg 密码:mg63

GPIO寄存器介绍

STM32F051-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端口都有一套上述的寄存器去配置它自己的功能

GPIO寄存器MODER(端口模式寄存器)

                                              

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

偏移地址: 0x00    

复位值:  

●  0x2800 0000 端口 A  

●  0x0000 0000 其他口

GPIO寄存器OTYPER(端口输出类型寄存器)

                                 

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

偏移地址: 0x04  

复位值: 0x0000 0000

GPIO工作原理框图

GPIO寄存器OSPEEDR(输出速度寄存器)

                                                 

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

偏移地址: 0x08      

复位值: 0x0000 0000

GPIO寄存器PUPDR(上拉 / 下拉寄存器)

                                                  

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

偏移地址: 0x0C      

复位值:    

● 0x2400 0000 端口 A    

● 0x0000 0000 其它端口

GPIO寄存器IDR(输入数据寄存器)

                                     

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

偏移地址: 0x10      复位值: 0x0000 XXXX (X 表明不定 )

GPIO寄存器ODR(输出数据寄存器)

                                      

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

偏移地址: 0x14      复位值: 0x0000 0000

GPIO寄存器BSRR(置位 / 复位寄存器)

                                              

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

偏移地址: 0x18      复位值: 0x0000 0000

GPIO寄存器AFRL(复用功能低位寄存器)

                                       

GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A..B)      

偏移地址: 0x20       复位值: 0x0000 0000

GPIO寄存器AFRH(复用功能高位寄存器)

                                  

GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A..B)      

偏移地址: 0x24       复位值: 0x0000 0000

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

内容概要

硬件原理图分析

编程步骤分析

编程实例操作

硬件原理图分析

使能GPIO的时钟

AHB 外部时钟使能寄存器 (RCC_AHBENR)    

偏移地址 : 0x14    

复位值 : 0x0000 0014    

访问:无等待周期,字,半字和字节访问

编程步骤分析

开启GPIOB的时钟
RCC->AHBENR  |=  1<<18;            

配置PB0 PB1 PB2接口   
GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4);    //设置PB0, PB1, PB2为通用输出模式
GPIOB->OTYPER = 0x0;    //设置PB0, PB1, PB2为通用推挽输出
GPIOB->OSPEEDR = 0x0;   //设置输出速度为低速

控制LED
GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED
GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);    //置位PB0, PB1, PB2 既熄灭LED

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

内容概要

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析

CubeMX的配置

初始化关键代码分析

GPIOB初始化

void MX_GPIO_Init(void)
{
  	GPIO_InitTypeDef GPIO_InitStruct;

	__HAL_RCC_GPIOB_CLK_ENABLE();   //使能GPIOB的时钟
	
	 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2; //初始化对象为0, 1, 2号管脚
 	 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //模式为推挽输出
 	 GPIO_InitStruct.Pull = GPIO_NOPULL;    //没有上拉
 	 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;    //低速
	 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);    //配置好后开始初始化
}

控制LED关键代码分析

复位PB0, PB1, PB2 既点亮LED
HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);

置位PB0, PB1, PB2 既熄灭LED
HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);

初识人机交互——按键

内容概要

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析

CubeMX的配置

STM32F0硬件

编程实例操作:按下按键灯的状态会进行翻转

​while (1)
  {
		while(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //判断按键是否按下
		HAL_Delay(20);  //延时消抖
		while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //再次判断按键是否还是按下状态
		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); //使灯翻转(亮灭)
		while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //判断按键是否抬起
		HAL_Delay(20);   //延时消抖
  }

猜你喜欢

转载自blog.csdn.net/weixin_39148042/article/details/81330873