STM32H750学习笔记(2.0)——GPIO口

文章介绍了如何使用STM32的HAL库进行GPIO端口的初始化,包括设置为推挽输出以驱动LED和配置为输入模式用于按键检测。同时,详细阐述了时钟使能的过程以及读写PIN的函数使用方法。在主循环中,通过读取按键状态来控制LED的亮灭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

初始化

时钟使能

配置按键输入

读PIN和写PIN的函数

代码实现


硬件电路图:

将LED连接到PC1上,当PC1给低电平时点亮

将KEY连接到PC13上,在while里用按键扫描方式判断按键按下


初始化

HAL库也是类似于标准库,先创建一个xxxx_InitTypeDef的初始化变量,然后给它赋值,再将其传递到初始化函数中。

这里初始化GPIO口,所以定义一个GPIO_InitTypeDef结构体变量。

在不知道这个结构体变量的每一个成员填什么的时候,右键点击,跳转到定义看解释

前面是成员名称,后面又相应的解释,并且会有这个定义,告诉我们去哪里找。

比如Pin,双击后面的GPIO_pins_define,按ctrl + F查找,跳过去

这里就有一个表给我们列出了那个成员可以填写哪些值。


为了给IO口输出点亮LED灯,通常配置成推挽输出、上拉,输出速度没有特殊需求就选最高的

GPIO_InitTypeDef GPIO_InitStructure;        //定义初始化结构体变量   

//GPIO_InitStructure.Alternate备用功能选择
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;    //推挽输出
GPIO_InitStructure.Pin = GPIO_PIN_1;              //引脚1
GPIO_InitStructure.Pull = GPIO_PULLUP;            //上拉
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;   //低速
HAL_GPIO_Init(GPIOC , &GPIO_InitStructure);       //初始化函数

HAL_GPIO_Init()函数可以在stm32h7xx_hal_gpio.h头文件最后找到,相应的外设就应该在相应的头文件中能找到,跳转到定义,看每个参数需要填什么,填好给它。

这就好像办理业务,先在纸上填写需要办理的业务,怎么办,相关的配置,也就是在结构体变量中配置好相应的参数,然后传递给初始化函数,让函数帮我们完成寄存器相关配置。

 


时钟使能

__HAL_RCC_GPIOC_CLK_ENABLE();    //使能GPIOC的时钟

库函数的函数名称都是有规律的,GPIOC的时钟使能是这样,可以得出ADC1的初始化使能是这样:

__HAL_RCC_ADC1_CLK_ENABLE();

库函数刚开始写不熟悉,可以查手册,可以百度,优快云,上网找,翻手册,写熟悉之后完全可以在头文件中找到需要的函数。


配置按键输入

GPIO_InitStructure.Mode = GPIO_MODE_INPUT;    //输入模式
GPIO_InitStructure.Pin = GPIO_PIN_13;         //PC13
GPIO_InitStructure.Pull = GPIO_PULLUP;        //上拉
HAL_GPIO_Init(GPIOC , &GPIO_InitStructure);   //初始化

读PIN和写PIN的函数

HAL_GPIO_ReadPin(GPIOC , GPIO_PIN_13);    //读取PC13脚电平
HAL_GPIO_WritePin(GPIOC , GPIO_PIN_1 , GPIO_PIN_RESET);    //写PC1脚电平
//GPIO_PIN_RESET - 0
//GPIO_PIN_SET - 1
//HAL_GPIO_ReadPin()函数返回值也是GPIO_PIN_RESET或GPIO_PIN_SET 

代码实现

while里进行按键扫描,PC13按下时,给PC1置低电平,LED灯亮起

#include "main.h"

int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;

	__HAL_RCC_GPIOC_CLK_ENABLE();
	
	//GPIO_InitStructure.Alternate备用功能选择
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStructure.Pin = GPIO_PIN_1;
	GPIO_InitStructure.Pull = GPIO_PULLUP;
	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOC , &GPIO_InitStructure);

	GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
	GPIO_InitStructure.Pin = GPIO_PIN_13;
	GPIO_InitStructure.Pull = GPIO_PULLUP;
	HAL_GPIO_Init(GPIOC , &GPIO_InitStructure);

	
	
	while(1)
	{
		if(HAL_GPIO_ReadPin(GPIOC , GPIO_PIN_13) == GPIO_PIN_RESET)
		{
			HAL_GPIO_WritePin(GPIOC , GPIO_PIN_1 , GPIO_PIN_RESET);
		}else
		{
			HAL_GPIO_WritePin(GPIOC , GPIO_PIN_1 , GPIO_PIN_SET);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天师电通电容爆破工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值