STM32
STM32 LED 켜기
오버헤드프레스
2023. 6. 7. 13:32
개발환경 세팅이 되어있는지 확인을 위해 LED켜기 진행
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);
}
다음도 가능
결과