基础配置与GPIO——薪火培训 电控组 第一讲
本文最后更新于 767 天前,其中的信息可能已经有所发展或是发生改变。

本讲的主要内容:

  • 环境的配置:STM32CUBEMX & MDK
  • 时钟
  • 如何编译/烧录程序
  • 常用GPIO函数:
  1. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,SET)
  2. HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1)
  3. HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)

Homework:

Code:(main.c核心代码)

基础作业:

//初始化后LED亮灭1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
HAL_Delay(1000);

//按键识别部分
while (1)
{    
	if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)==0) //消抖
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)==0)
		{
			break;
		}
	}
}
	
//LED控制
//亮灭交替,周期1s
while(1)
{
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
	
	HAL_Delay(500);
	
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
	
	HAL_Delay(500);
}

附加题1:

//LED控制
while(1)
{
	for(int LED_ON_PERIOD=100;LED_ON_PERIOD>=1;LED_ON_PERIOD--)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
		
		HAL_Delay(LED_ON_PERIOD/2);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(LED_ON_PERIOD/2);
	}
	for(int LED_ON_PERIOD=1;LED_ON_PERIOD<=100;LED_ON_PERIOD++)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
		
		HAL_Delay(LED_ON_PERIOD/2);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(LED_ON_PERIOD/2);
	}
}

附加题2:

//LED控制
while(1)
{
	for(int LED_ON_PERIOD = 1 ; LED_ON_PERIOD <=50 ; LED_ON_PERIOD++)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
	
		HAL_Delay(LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(50-LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
	
		HAL_Delay(LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(50-LED_ON_PERIOD);
	}
	
	for(int LED_ON_PERIOD = 50 ; LED_ON_PERIOD >=1 ; LED_ON_PERIOD--)
	{
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
	
		HAL_Delay(LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(50-LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_SET);
	
		HAL_Delay(LED_ON_PERIOD);
		
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0 , GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1 , GPIO_PIN_RESET);
		
		HAL_Delay(50-LED_ON_PERIOD);
	}
}


欢迎通过E-mail:blog#drinkcat.com 与我进行交流。
关注我的微信订阅号:饮猫DrinkCat在BIT,即是对我最大的支持~


上一篇
下一篇