STM32学习笔记之GPIO及点灯实例

系列文章目录

第一章 STM32学习笔记之新建标准库

第二章 STM32学习笔记之GPIO及点灯实例

第N章 STM32学习笔记之OLED屏幕

第N章 STM32学习笔记之EXTI外部中断

第N章 STM32学习笔记之对射式红外传感器计次


目录

系列文章目录

GPIO简介

1.1. 基本结构

1.2. 具体电路结构

1.3. GPIO八种模式

1. 实例1:点灯

1.1. 使能时钟

1.2. 外设初始化

1.3. 配置引脚高低电平

2. 实例2:跑马灯

2.1. 接线图

2.2. 使能时钟

2.3. 外设初始化

2.4. 配置引脚高低电平

2.5. 添加延时函数

2.6. 使用延时函数

总结


前言:

笔记:跟着B站教学视频做的学习笔记


GPIO简介

1.1. 基本结构

  • 在STM32中,所以的GPIO都挂载在APB2外设总线上
  • 名称都是按照GPIOA、GPIOB、GPIOC等等来命名,每个GPIO外设总共有16个引脚,编号从0~15
  • 寄存器就是特殊的存储器,内核通过APB2总线对寄存器进行读写,完成输出电平和读取电平的功能
  • STM32寄存器都是32位的,但由于端口只有16位,所以只有低16位有对应端口,每一位对应一个引脚
  • 驱动器增加信号驱动能力

STM32学习笔记之GPIO及点灯实例_第1张图片

1.2. 具体电路结构

  • IO为输入模式时:

STM32学习笔记之GPIO及点灯实例_第2张图片

  • IO为输出模式时:

STM32学习笔记之GPIO及点灯实例_第3张图片

1.3. GPIO八种模式

见图 :

STM32学习笔记之GPIO及点灯实例_第4张图片

1. 实例1:点灯

实例都是基于新建工程之后,所以实操之前需要新建工程,点亮的是STM32F103C8T6上的PC13这号引脚

1.1. 使能时钟

使用外设前,需要开启外设的时钟

  • 这入RCC_APB2PeriphClockCmd函数

STM32学习笔记之GPIO及点灯实例_第5张图片

  • 右键该函数,跳转到该函数的定义中去

STM32学习笔记之GPIO及点灯实例_第6张图片

  • 复制“RCC_APB2Periph_GPIOC”为第一个参数,复制“ENABLE”为第二个参数,别忘了括号和分号

STM32学习笔记之GPIO及点灯实例_第7张图片

1.2. 外设初始化

开启时钟后,需要对GPIO进行初始化

  • 需要用到GPIO_Init这个函数,所以输入该函数

STM32学习笔记之GPIO及点灯实例_第8张图片

  • 右键GPIO_Init()函数进入该函数的定义

STM32学习笔记之GPIO及点灯实例_第9张图片

  • 可以看到这个函数介绍是根据GPIO_InitStruct的参数来配置GPIO的,有两个参数

STM32学习笔记之GPIO及点灯实例_第10张图片

  • 第一个参数是“GOIOx”,因为配置的端口是PC13,所以第一个参数为“GPIO13”

STM32学习笔记之GPIO及点灯实例_第11张图片

  • 第二个参数是GPIO_InitTypeDef的结构体,先定义这个结构体

STM32学习笔记之GPIO及点灯实例_第12张图片

  • 输入结构体名称,再输入“.”,会提示参数成员

STM32学习笔记之GPIO及点灯实例_第13张图片

  • 复制粘贴结构体的名字,将三个结构体参数都列出来

STM32学习笔记之GPIO及点灯实例_第14张图片

  • 右键结构体第一个参数Mode,进入其定义

STM32学习笔记之GPIO及点灯实例_第15张图片

  • 可以看到注释里说这个“GPIO_Mode”参数可以是“GPIO_Mode_TypeDef”里的一个值,但是它是注释,跳转不到该定义

STM32学习笔记之GPIO及点灯实例_第16张图片

  • 选中“GPIO_Mode_TypeDef”,然后“Ctrl+F”或着点击“Edit”下的“Find”

STM32学习笔记之GPIO及点灯实例_第17张图片

  • 点击“Find Next”,查找这个文件还在哪里出现

STM32学习笔记之GPIO及点灯实例_第18张图片

  • 可以看到这个定义是个枚举,选择“GPIO_Mode_Out_PP”(推挽输出)

STM32学习笔记之GPIO及点灯实例_第19张图片

  • 回到main函数,赋给“GPIO_InitStructure.GPIO_Mode”

STM32学习笔记之GPIO及点灯实例_第20张图片

  • 到配置GPIO_Pin,同样右键选择进入Pin定义里

STM32学习笔记之GPIO及点灯实例_第21张图片

  • 出下面出现了一个框,这个是说它的定义有很多个,我们选择“member”项,双击

STM32学习笔记之GPIO及点灯实例_第22张图片

  • 可以看到说“GPIO_Pin”是在“GPIO_Pins_define”里定义了,去这里查看

STM32学习笔记之GPIO及点灯实例_第23张图片

  • 选中“GPIO_Pins_define”,然后“Ctrl+F”或着点击“Edit”下的“Find”

STM32学习笔记之GPIO及点灯实例_第24张图片

  • 点击“Find Next”,查找这个文件还在哪里出现

STM32学习笔记之GPIO及点灯实例_第25张图片

  • 根据它的宏定义,以及端口是PC13,所以选择“GPIO_Pin_13”

STM32学习笔记之GPIO及点灯实例_第26张图片

  • 回到main函数,赋给“GPIO_InitStructure.GPIO_Pin”

STM32学习笔记之GPIO及点灯实例_第27张图片

  • 最后Speed参数也是同样的步骤,进入Speed定义,然后搜索查找它的def定义,选择50MHz的

STM32学习笔记之GPIO及点灯实例_第28张图片

  • 回到main函数,赋给“GPIO_InitStructure.GPIO_Speed”

STM32学习笔记之GPIO及点灯实例_第29张图片

  • 完成GPIO_Init函数,第二个参数是指针,所以是结构体名称,然后取地址

STM32学习笔记之GPIO及点灯实例_第30张图片

1.3. 配置引脚高低电平

对PC13引脚配置高低电平,即可实现该灯的亮灭

  • “GPIO_SetBits”函数是将电平配置为高电平,“GPIO_ResetBits”函数是将电平配置为低电平,参数通过查找定义来进行确认

STM32学习笔记之GPIO及点灯实例_第31张图片

  • 端口配置为高电平时,用“GPIO_SetBits”函数

STM32学习笔记之GPIO及点灯实例_第32张图片

  • 端口配置为低电平时,用“GPIO_ResetBits”函数

STM32学习笔记之GPIO及点灯实例_第33张图片

2. 实例2:跑马灯

实例都是基于新建工程之后,所以实操之前需要新建工程,本次操作Pin端口为GPIOA的0~2号引脚

2.1. 接线图

只接了PA0~PA2

STM32学习笔记之GPIO及点灯实例_第34张图片

2.2. 使能时钟

用外设前,需要开启外设的时钟

  • 这入RCC_APB2PeriphClockCmd函数

STM32学习笔记之GPIO及点灯实例_第35张图片

  • 右键该函数,跳转到该函数的定义中去

STM32学习笔记之GPIO及点灯实例_第36张图片

  • 由上面的简介可以得知,两个参数分别为“RCC_APB2Periph_GPIOA”和“ENABLE”

STM32学习笔记之GPIO及点灯实例_第37张图片

  • 这样时钟就开启了

STM32学习笔记之GPIO及点灯实例_第38张图片

2.3. 外设初始化

外设使用之前都要初始化

  • 初始化GPIO,在库函数中找到gpio.h文件,找到GPIO_Init函数

STM32学习笔记之GPIO及点灯实例_第39张图片

  • 输入GPIO_Init函数到主函数上,显示需要输入两个参数

STM32学习笔记之GPIO及点灯实例_第40张图片

  • 右键进入该函数的定义,第一个参数是GPIOA~G,第二个参数是GPIO初始化结构体

STM32学习笔记之GPIO及点灯实例_第41张图片

  • 定义一个初始化结构体,先把结构体类型复制到GPIO_Init函数上面(函数定义里有),结构体名字自己定义

STM32学习笔记之GPIO及点灯实例_第42张图片

  • 双击这个结构体,进入它的定义来看看有哪些内容

STM32学习笔记之GPIO及点灯实例_第43张图片

  • 输入刚刚定义好的结构体,再输入“.”后,会出来三个选项,跟上一步看到的定义一样

STM32学习笔记之GPIO及点灯实例_第44张图片

  • 将这结构体的成员都引出来

STM32学习笔记之GPIO及点灯实例_第45张图片

  • 选中“GPIO_Mode”,右键进去它的定义里

STM32学习笔记之GPIO及点灯实例_第46张图片

  • 继续右键进入“GPIOMode_Type这个结构体,看看它的结构体内容

STM32学习笔记之GPIO及点灯实例_第47张图片

  • 模式有8种,我们选择“GPIO_Mode_Out_PP”推挽输出

STM32学习笔记之GPIO及点灯实例_第48张图片

  • 将“GPIO_Mode_Out_PP”赋给“GPIO_InitStuct_JH.GPIO_Mode”

STM32学习笔记之GPIO及点灯实例_第49张图片

  • 到配置GPIO_Pin,同样右键选择进入Pin定义里

STM32学习笔记之GPIO及点灯实例_第50张图片

  • 下面出现了一个框,这个是说它的定义有很多个,我们选择“member”项,双击

STM32学习笔记之GPIO及点灯实例_第51张图片

  • 在简介里,可以看到说“GPIO_Pin”是在“GPIO_Pins_define”里定义了

STM32学习笔记之GPIO及点灯实例_第52张图片

  • 选中“GPIO_Pins_define”,然后“Ctrl+F”或着点击“Edit”下的“Find”

  • 点击“Find Next”,查找这个文件还在哪里出现

STM32学习笔记之GPIO及点灯实例_第53张图片

  • 根据它的宏定义,本次使用的是GPIOA外设的0、1、号引脚,所以选择“GPIO_Pin_0~2”

STM32学习笔记之GPIO及点灯实例_第54张图片

  • 回到main函数,赋给“GPIO_InitStructure.GPIO_Pin”,根据Pin的定义,Pin0~Pin2地址分别为1、2、4,就是001,010,100,就是想要初始化哪个引脚,哪个引脚位就置1,所以将Pin0~Pin2引脚进行或运算,就能得到111,即同时初始化Pin0、Pin1、Pin2引脚

STM32学习笔记之GPIO及点灯实例_第55张图片

  • 最后一个“GPIO_Speed”老套路,去它的定义里找,最后选择“GPIO_Speed_50MHz”

STM32学习笔记之GPIO及点灯实例_第56张图片

  • 最后将定义好初始化好的结构体,放在GPIO初始化函数的第二个参数中取地址,这样初始化就完成了

STM32学习笔记之GPIO及点灯实例_第57张图片

2.4. 配置引脚高低电平

  • 配置IO口高低电平,在库函数中找到gpio.h文件,找到“GPIO_WriteBit”函数

STM32学习笔记之GPIO及点灯实例_第58张图片

  • 将“GPIO_WriteBit”函数复制到main函数的循环里去,参数如下,“Bit_RESET”为配置低电平,“Bit_SET”为配置高电平,不明确的去看它的参数定义

STM32学习笔记之GPIO及点灯实例_第59张图片

2.5. 添加延时函数

  • 将延时函数复制

STM32学习笔记之GPIO及点灯实例_第60张图片

  • 在工程路径下新建一个命名为“System”的文件夹,将延时函数粘贴进去

STM32学习笔记之GPIO及点灯实例_第61张图片

  • 回到Keil工程,点击“三个箱子”按钮

STM32学习笔记之GPIO及点灯实例_第62张图片

  • 新增组,将延时函数添加进去

STM32学习笔记之GPIO及点灯实例_第63张图片

  • 点击“魔术棒”按钮

STM32学习笔记之GPIO及点灯实例_第64张图片

  • 添加新文件夹的头文件路径

STM32学习笔记之GPIO及点灯实例_第65张图片

这样延时函数就添加完成了

2.6. 使用延时函数

  • 在main.c中声明延时函数

STM32学习笔记之GPIO及点灯实例_第66张图片

  • 去"Delay.h"里复制延时函数,根据需求看是复制毫秒还是秒还是微秒的

STM32学习笔记之GPIO及点灯实例_第67张图片

  • 将延时函数复制在循环里,让灯不断亮灭,时间间隔可以自己设置,这里设置500ms,这样跑马灯就实现了

STM32学习笔记之GPIO及点灯实例_第68张图片

  • 高级写法,用一个for循环和Write函数,按位左移即可

STM32学习笔记之GPIO及点灯实例_第69张图片

END


总结

本章节记录了GPIO相关内容以及操作GPIO进行点灯的操作步骤,后面章节还有关于操作GPIO的实例

你可能感兴趣的:(STM32,stm32,学习,笔记)