STM32入门之GPIO

STM32的一般学习流程

1、学习STM32 基础知识,系统框架 ,并熟悉其开发环境

2、新建工程,下载程序

3、GPIO使用,位段操作

4、SysTick 定时器及定时器

5、中断概念,中断系统

6、外部中断

7、定时器中断及脉冲宽度调制

8、串口通信及串口中断

9、TFTLCD 显示

10、触摸屏

11、RTC 实时时钟

12、模拟/数字转换 和数字/模拟转换 (AD/DA)

13、IIC 与 EEPROM

14、SPI 与 FLASH

(以下为非必须)

15、看门狗

16、DMA 数据传送

17、.UCOS操作系统

18、SDIO 与 SD 卡

19、ucGUI 及文件系统

STM32之GPIO操作

今天主要讲的是STM32 GPIO口的操作,对比起51单片机,是STM32的IO资源变丰富了。

以STM32F103为例,GPIO口分为A,B,C,D,E,F,G  7组,每组16个I/O。所有的IO都是多功能的,使用前用户要先配置(输入/输出/复用),默认输入功能。

每个GPIO端口有2个32位配置寄存器(GPIOx_CRL、GPIOx_CRH); 2个32位数据寄存器( GPIOx_IDR、GPIOx_ODR );1个32位置位/复位寄存器( GPIOx_BSRR); 端口位清除寄存器(GPIOx_BRR) 和1个32位锁定寄存器( GPIOx_LCKR)。 

 0~7:低IO,用GPIOx_CRL配置;8~15:高IO, GPIOx_CRH配置。GPIOx_CRL和GPIOx_CRH 的每4个位配置一个IO口。

GPIO寄存器描述

端口配置低寄存器 :用于配置GPIOx.0~GPIOx.7模式。


端口配置低寄存器(GPIOx_CRL) (x=A..E)

端口配置高寄存器:用于配置GPIOx.8~GPIOx.15模式。


端口配置高寄存器(GPIOx_CRH) (x=A..E)

端口输入数据寄存器:判断IO口状态。


端口输入数据寄存器(GPIOx_IDR) (x=A..E) 

端口输出数据寄存器:对IO口输出电平进行控制。


端口输出数据寄存器(GPIOx_ODR) (x=A..E)

示例程序

1、IO输出模式以点亮LED(GPIOB.5)为例,步骤如下:

led初始化
(1)开启对应GPIO口时钟(APB2ENR外设时钟使能寄存器)

(2)GPIO端口配置:1)GPIOB5口置零    2)设置GPIOB5口模式(推挽输出)

程序

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
      /* GPIOC Configuration:kuozhangban as alternate function push-pull */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

      GPIO_Init(GPIOB, &GPIO_InitStructure);

}

GPIO_SetBits(GPIOB,GPIO_Pin_5);//按键置“1”
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//按键置“0”

2、IO输入模式按键控制(GPIOB.5)为例,步骤如下:

按键初始化
(1)开启对应GPIO口时钟(GPIOA和E)
(2)GPIO端口配置:1)GPIOA0口置零  2)设置GPIOA0口模式(上(下)拉输入) 3)设置输出数据寄存器ODR(输出高)
(3)或设置成浮空输入,不需要设置ODR端

程序

void GPIO_Configuration(void)
{

     GPIO_InitTypeDef GPIO_InitStructure;

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

     GPIO_Init(GPIOB, &GPIO_InitStructure);
}

判断:if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) )//高电平为“1”,低电平为“0”

最后写一个按键扫描函数就可以了。

STM32位段操作

Cortex™-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果。

C52单片机可以简单的将位单独操作:P1.2=0;STM32的位段、位带别名区就是为了实现这样的功能,对象是SRAM、IO外设空间实现对这些地方的某一位的操作。

在寻址空间另一地方,取一个别名区空间,从这个地址开始处,每一个字(32bit)就对应SRAM或I/O的一位.这样1MB的SRAM就可以有32MB的对应别名区空间,就是1位膨胀成32位(1bit便是一个字),我们对这个别名区空间开始的某一字操作,置0或者1,就等于映射的SRAM或I/0相应的某一位进行操作。


猜你喜欢

转载自blog.csdn.net/qq_41174320/article/details/80716753