一:知识前置:

1.什么是GPIO?
GPIO是通过输入输出端口的简称,简单来说就是STM32可控制引脚STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

简单来说我们可以控制GPIO引脚的电平变化,达到我们的各种目的。

2.命名规则
组编号+引脚编号 比如:HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
组编号(GPIOx):GPIOA, GPIOB, GPIOC, GPIOD … GPIOG
引脚编号(GPIO_PIN_8):0,1,2,3,4…15
组合起来:
PA0, PA1, PA2 … PA15
PB0, PB1, PB2 … PB15
PC0, PC1, PC2 … PC15

有一些特殊功能的引脚是不能用作IO的。

3.内部框架图(可以跳过不看)
在这里插入图片描述

二:HAL库内手动配置

1.打开Stm32CubeMX,界面如图
在这里插入图片描述2.选型片:stm32f103c8t6
在这里插入图片描述
3.在左侧SYS中,选Serial Wire
Serial Wire 是一种用于嵌入式系统调试和编程的接口标准。它通常用于连接调试器或编程器与目标处理器或微控制器进行通信,以进行调试、下载程序和读取/写入寄存器等操作。Serial Wire 接口通常具有较少的引脚,因此适用于资源受限的嵌入式系统。这种接口通常使用专门的调试协议(如ARM的SWD协议)来实现与目标设备之间的通信。 Serial Wire 接口在嵌入式系统领域中被广泛应用,特别是在使用ARM处理器的系统中。
在这里插入图片描述4.读芯片引脚原理图,找LED灯是哪个引脚控制,如图右侧PB8
在这里插入图片描述
在这里插入图片描述

5.SYS选中Serial Wire后,PA13,PA14会自动配置了SWDIO和SWCLK(这步可以忽略)
在这里插入图片描述
6.先LED灯设置为高电平模式,
在这里插入图片描述7.代码设置生成的文件(下面的Clock Configuration时钟配置这次选默认,就是不用手动更改)
在这里插入图片描述

8.最后一步:
在这里插入图片描述

二:Keil5内增加业务逻辑代码

1.Keil5在stm32cubemx项目生成代码自动打开后的原始代码界面如图:
在这里插入图片描述2.可以同时打开两个代码界面,水平观看
在这里插入图片描述3.只写一行代码,就完成点灯操作
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);//在所有函数中,作者只加了这一行代码,按了复位按键,灯就变亮了在这里插入图片描述4.这里加中文注释可能会乱码,需要改格式:Chinese GB2312
在这里插入图片描述5.烧录程序成功后,会提示时间
在这里插入图片描述
6.打开STM32开发板,按复位按键,下一步,灯自己亮了
在这里插入图片描述
7.测试,添加延时亮灯测试,成功实现,_
在这里插入图片描述

四:深挖知识点

以上可以实现一个基于hal库的最简单一个点灯操作,以下是可以多学习的知识点

1.常用的GPIO HAL库函数(理解不了指针结构体就记住人家就长这样,游戏规则,会用就行):
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

2.结构体 GPIO_InitTypeDef 定义:
typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;
uint32_t Speed;
} GPIO_InitTypeDef;

3.新增其他代码要在专门的标识区书写,一定要在注释内写,不然编译时,有时候可能丢失
在这里插入图片描述

以上,完

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐