【STM32Cube HAL】GPIO输入/输出(一)

本文详细介绍了如何使用STM32CubeMX配置STM32F103VETx开发板,包括时钟源设置、GPIO引脚功能配置,以及如何通过按键KEY1控制RGB灯进行颜色变换的代码实现。适合初学者学习GPIO操作和基本的嵌入式控制应用。
摘要由CSDN通过智能技术生成

实验内容:按键KEY1控制RGB灯颜色变换

一、原理图

二、 CubeMX配置

Step1. 打开 STM32CubeMX ,点击“ New Project ”,选择芯片型号, STM32F103VETx

 Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。

  

Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这两个引脚用于其他复用功能,如果用于其他复用功能,debug就不起作用了。)

 

 Step4.GPIO引脚配置,点击搜索框,选择相应的引脚。PB0/PB1/PB5  配置为GPIO_Output,PA0 配置为GPIO_Input。

 KEY引脚配置:方框3 第一行是GPIO模式,这里选择输入模式,第二行是选择上拉还是下拉,这里选择既不上拉也不下拉,第三行是用户标签(可以自己给该引脚命名)。

 RGB灯引脚配置:方框中 第一行是初始化引脚电平,(我的开发板灯是低电平亮,所以初始化高电平),第二行是GPIO模式,这里选择推挽输出,第三行是选择上拉还是下拉,这里选择既不上拉也不下拉,第四行是IO口翻转速度,这里选择低速,第五行是用户标签(可以自己给该引脚命名)。

 Step5.Project工程设置,这个选项是配置工程重要的一个选项,其中配置的信息也比较重要,且容易理解。

  Step6.Project代码生成配置界面。

  Step7.Project高级配置界面。(一般情况下,采用默认配置即可)

   Step8.点击“GENRATE CODE”生成代码

三、添加功能代码

按键扫描程序:

uint8_t KEY_SCAN(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
	if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1)
	{
		while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1);//松手检测
		return 1;
	}
		return 0;
}

RGB灯控制程序:

	uint8_t cnt=0;
	uint8_t value=0;
  while (1)
  {
		value=KEY_SCAN(KEY_CTRL_GPIO_Port, KEY_CTRL_Pin);
		if(value==1)
		{
			switch(cnt)
			{
				case 0:
				{
				    HAL_GPIO_WritePin(GPIOB, LED_R_Pin,0);
				    HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
				    HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
				    cnt++;
				    break;
				}
				case 1:
				{
					HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
					HAL_GPIO_WritePin(GPIOB, LED_G_Pin,0);
				    HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
					cnt++;
				    break;
				}
				case 2:
				{
					HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
					HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
				    HAL_GPIO_WritePin(GPIOB, LED_B_Pin,0);
					cnt++;
				    break;
				}
				case 3:
				{
					HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
					HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
				    HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
					cnt=0;
				    break;
				}
			}
					
		}

  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值