CubeMX使用教程(3)——如何配置GPIO

在第二章我们完成了点灯仪式,这次我准备尝试把按键和灯结合起来,做一次GPIO的综合测试

 任务为:按下按键1(B1),第1个灯(LD1)亮;

                按下按键2(B2),第2个灯(LD2)亮;

                按下按键3(B3),第3个灯(LD3)亮,0.5秒后自己熄灭;

                按下按键4(B4),所有灯(LD1-LD8)亮; 

首先打开CubeMX,新建一个项目

 

 上面两张图是G431RBT6开发板的LED原理图和按键原理图,因此我们应当把PC8~PC15配置为输出(Output),把PB0PB1PB2PA0配置为输入(Input),并且可以看到原理图中按键的两边分别接了VDD和GND,因此不需要设置输入模式了,上拉输入和下拉输入通常用于确保输入引脚在未连接到明确电源或地的情况下,能够保持一个明确的电平状态。这对于一些数字输入引脚,如按钮或开关输入,可以避免不稳定的状态或漂移。比如在F1系列中,按键有一边状态未明时,需要将其设置为上拉输入。

 

 

 

 

 首先我们在main.c中编写按键扫描函数(写在/* USER CODE BEGIN 0 *//* USER CODE END 0 */ 之间,防止代码被抹去)

/* USER CODE BEGIN 0 */

uint8_t Key_Scan(void) //按键扫描函数
{   

	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0) //PB0 (按键B1)被按下
	{
		HAL_Delay(10);//延时消抖
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0)
		{
			while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == 0); //等待按键抬起
			return 1;//返回1
		}
	}
	
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0) //PB1 (按键B2)被按下
	{
		HAL_Delay(10);//延时消抖
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0)
		{
			while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == 0); //等待按键抬起
			return 2;//返回2
		}
	}
	
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0) //PB2 (按键B3)被按下
	{
		HAL_Delay(10);//延时消抖
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0)
		{
			while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2) == 0); //等待按键抬起
			return 3; //返回3
		}
	}
	
	if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0) //PA0 (按键B4)被按下
	{
		HAL_Delay(10);//延时消抖
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0)
		{
			while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0); //等待按键抬起
			return 4; //返回4
		}
	}
	
	return 0; //没有按键按下返回0
}

/* USER CODE END 0 */

然后我们在主函数中编写任务需要的程序

在  while (1)中的/* USER CODE BEGIN 3 */后面编写功能函数

int Key_Value = 0;
	
	Key_Value = Key_Scan();

	if(Key_Value == 1) //按键B1被按下
	{
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, 0);//只打开第1个灯
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响
	}
	
	if(Key_Value == 2) //按键B2被按下
	{
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, 0);//只打开第2个灯
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响
	}
	
	if(Key_Value == 3) //按键B3被按下
	{
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//先关闭所有灯
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, 0);//只打开第3个灯
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响
			HAL_Delay(500);//延时500ms
			HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 1);//关闭所有灯
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
			HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);//PD2为锁存器开关,防止灯的状态受到LCD影响
	}
	
	if(Key_Value == 4) //按键B4被按下
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, 0);
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 1);
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, 0);
	}

编译之后,通过程序烧录软件或者烧录器下载程序,即可完成实验任务

1、B1按下(第一个灯亮)

2、B2按下(第二个灯亮)

3、B3按下(LD3亮0.5s后自动熄灭,图片无法展示效果)

4、B4按下(所有灯都亮)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32CubeMX是一款用于STM32微控制器的图形化配置工具。它能够帮助开发人员轻松进行GPIO(通用输入/输出)的配置。 首先,我们需要打开STM32CubeMX工具,并选择我们所使用的微控制器型号。然后,我们可以看到一个图形界面,里面列出了所有的引脚和外设选项。 要配置GPIO,我们可以从左侧的引脚列表中选择一个引脚,并在右侧的“GPIO设置”选项卡中进行配置。在此选项卡中,我们可以选择引脚的模式(输入、输出,或者复用功能)、速度(低、中、高)和拉电阻设置(无、上拉、下拉)。我们还可以选择引脚的初始状态(高或低)。 除了引脚的配置,我们还可以配置其他的GPIO设置,比如中断配置和模拟功能配置。在中断配置中,我们可以选择使能或禁用引脚的中断,并设置中断触发方式(上升沿、下降沿、边沿触发等)。在模拟功能配置中,我们可以选择启用或禁用引脚的模拟功能,比如模拟输入或者DAC输出等。 配置完成后,我们只需要点击“生成代码”按钮,STM32CubeMX将自动生成初始化代码,包括引脚的初始化、外设的配置和中断处理等。我们可以将这些代码导入到我们所使用的集成开发环境(IDE)中,然后进行进一步的开发和调试。 总的来说,STM32CubeMX是一个强大的配置工具,能够帮助我们轻松地进行GPIO配置。它提供了一个直观的图形界面,能够快速选择和配置引脚,同时生成初始化代码,加快了开发的速度和减少了出错的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值