STM32

STM32 LED 켜기

오버헤드프레스 2023. 6. 7. 13:32

 

개발환경 세팅이 되어있는지 확인을 위해 LED켜기 진행

 

0.3초 간격으로 깜빡임

 

 

 

 

64핀

 

 

 

PB0 ~ PB7 모두 좌클릭 후 GPIO_OUTPUT으로 설정

 

 

우클릭 후 ENTER USER LABEL 입력

PB0 ~ PB7 까지 LED0 ~ LED7 설정

 

 

버튼은 INPUT으로 설정. 마찬가지로 이름 또한 변경

 

DDR 설정 끝

 

설정한 DDR 코드를 생성할 것인지 물어봄 yes

 

main.h 에 들어가면 만들었던 핀이 전부 나옴

 

구조체

 

inc

 

 

#include "led.h"

void led_main(void);
void led_all_on(void);
void led_all_off(void);
void led_on_up(void);
void led_on_down(void);

void led_main(void)
{
	while(1)
	{
		led_on_up();
		led_on_down();
//		HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_All);
//		HAL_Delay(300);
    //		led_all_on();
	//	HAL_Delay(300);
	//	led_all_off();
	//	HAL_Delay(300);
	}
}

void led_all_toggle()
{
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_All);

}
// 0 -> 1 -> -> 2 ----> 7
void led_on_up()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		HAL_GPIO_WritePin(GPIOB, 0x01 << i, 1);
		HAL_Delay(200);
	}
}

// 7 -> 6 ----> 1
void led_on_down()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		//10000000 0x80
		HAL_GPIO_WritePin(GPIOB, 0x80 >> i, 1);
		HAL_Delay(200);
	}
}

//led all on
void led_all_on(void)
{
	//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, 1);
	HAL_GPIO_WritePin(GPIOB, 0xffff, 1);


}
//led all off
void led_all_off(void)
{
//	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7, 0);
	HAL_GPIO_WritePin(GPIOB, 0xffff, 0);
}

 

 

 

led_on_up, led_on_down을 반복

 

 

led 계단식 on

#include "led.h"

void led_main(void);
void led_all_on(void);
void led_all_off(void);
void led_on_up(void);
void led_on_down(void);
void led_keep_on_up(void);
void led_keep_on_down(void);

void led_main(void)
{
	while(1)
	{
		led_keep_on_up();
		led_all_off();
		led_keep_on_down();
		led_all_off();
	}
}

void led_all_toggle()
{
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_All);

}
//1.led_keep_on_up()
//2.led_keep_on_down()
void led_keep_on_up()
{
	for(int i = 0; i < 8; i++)
		{
			HAL_GPIO_WritePin(GPIOB, 0x01 << i, 1);
			HAL_Delay(200);
		}
}

void led_keep_on_down()
{
	for(int i = 0; i < 8; i++)
		{
			HAL_GPIO_WritePin(GPIOB, 0x80 >> i, 1);
			HAL_Delay(200);
		}
}
// 0 -> 1 -> -> 2 ----> 7
void led_on_up()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		HAL_GPIO_WritePin(GPIOB, 0x01 << i, 1);
		HAL_Delay(200);
	}
}

// 7 -> 6 ----> 1
void led_on_down()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		//10000000 0x80
		HAL_GPIO_WritePin(GPIOB, 0x80 >> i, 1);
		HAL_Delay(200);
	}
}

//led all on
void led_all_on(void)
{
	HAL_GPIO_WritePin(GPIOB, 0xffff, 1);
}
//led all off
void led_all_off(void)
{
	HAL_GPIO_WritePin(GPIOB, 0xffff, 0);
}

이 코드도 가능

 

#include "led.h"

void led_main(void);
void led_all_on(void);
void led_all_off(void);
void led_on_up(void);
void led_on_down(void);
void led_keep_on_up(void);
void led_keep_on_down(void);

void led_main(void)
{
	while(1)
	{
		led_keep_on_up();
		led_all_off();
		led_keep_on_down();
		led_all_off();
	}
}

void led_all_toggle()
{
	HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_All);

}
//1.led_keep_on_up()
//2.led_keep_on_down()
void led_keep_on_up()
{
	unsigned char led = 0; //이전의 led값을 유지하기 위해서
	for(int i = 0; i < 8; i++)
		{
			led |= 0x01 << i;  //led : 00000001 00000011 00000111
			HAL_GPIO_WritePin(GPIOB, led, 1);
			HAL_Delay(200);
		}
}

void led_keep_on_down()
{
	unsigned char led = 0; //이전의 led값을 유지하기 위해서
		for(int i = 0; i < 8; i++)
			{
				led |= 0x80 >> i;  //led : 10000000 11000000 11100000
				HAL_GPIO_WritePin(GPIOB, led, 1);
				HAL_Delay(200);
			}
}
// 0 -> 1 -> -> 2 ----> 7
void led_on_up()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		HAL_GPIO_WritePin(GPIOB, 0x01 << i, 1);
		HAL_Delay(200);
	}
}

// 7 -> 6 ----> 1
void led_on_down()
{
	for(int i = 0; i < 8; i++)
	{
		led_all_off();
		//10000000 0x80
		HAL_GPIO_WritePin(GPIOB, 0x80 >> i, 1);
		HAL_Delay(200);
	}
}

//led all on
void led_all_on(void)
{
	HAL_GPIO_WritePin(GPIOB, 0xffff, 1);
}
//led all off
void led_all_off(void)
{
	HAL_GPIO_WritePin(GPIOB, 0xffff, 0);
}

 

다음도 가능

 

 

 

결과