学习笔记:LV.23 D3 STM32 GPIO口操作平台介绍

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

1.1 GPIO接口简介

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

 

GPIO引脚如果是输入模式,就可以感知这条线路的高低电平变化,从而判断按键是按下还是抬起

GPIO引脚如果是输出模式,就可以向这条线路发送高低电平,从而使LED灯点亮或熄灭。

1.2 GPIO功能复用

 注:查看 《 STM32F0数据手册》

1.3 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

设置为推挽输出时,P-MOS和N-MOS都可以工作,就可以输出高低电平。

设置为开漏输出时,只有N-MOS工作,只能输出低电平 

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寄存器版

2.1 硬件原理图分析

使能GPIO的时钟

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

偏移地址 : 0x14    

复位值 : 0x0000 0014    

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

2.2 编程步骤分析

开启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

2.3 编程实例操作

1、先写一个初始化函数 

 2、在main函数中调用初始化函数

3、控制LED灯

4、连接开发板,点击编译,再点击下载。按下开发板上的复位键,即可看到LED灯闪烁。

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

3.1 硬件原理图分析

 

3.2 CubeMX配置

 

3.3 初始化关键代码分析

 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);                      //配置好后开始初始化
}

  复位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);

3.4编程实例操作

1、把相应的管脚选择为GPIO_Output功能

 

 2、点击GPIO图标后,可以进行更详细的配置

 

 

 3、点击导出,再点击Open Project打开工程,再在main函数中调用HAL_GPIO_WritePin函数

四、初识人机交互——按键

4.1 硬件原理图分析

五向键的五个按键默认是接地的, 是低电平状态,按下后,会产生高电平

从图中可以看出,五向键连接到核心板的PA8 

4.2CubeMX配置

 

本次实验使用五向键 

4.3编程实例操作

要求:按下按键灯的状态会进行翻转 

1、把PB0、PB1、PB2管脚设置为输出,PA8管脚设置为输入

 

 2、打开工程文件,在main.c文件的main函数中输入:

 while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8) == GPIO_PIN_SET)
		{
			while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8) == GPIO_PIN_SET);		//等待按键抬起
			
			HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);	//翻转LED灯
		}

3、编译、下载到开发板

五、作业

 编程实现STM32流水灯

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » 学习笔记:LV.23 D3 STM32 GPIO口操作平台介绍

发表评论