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

实验内容:按键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;
				}
			}
					
		}

  }

猜你喜欢

转载自blog.csdn.net/qq_29031103/article/details/119893661