임베디드/STM32 (ARM Cortex - M4)

[STM32] 개발 보드 LED 제어

O_oz 2023. 10. 16. 16:54
반응형

사용하는 개발 보드는 NUCLEO-F429ZI이다

만약 보드가 다르더라도 

포트와 핀 넘버가 다를 뿐, 맥락은 비슷하지 않을까 싶다

개발 보드 내에 LED를 제어하는 방법을 알아볼건데,

제어할 LED들은 빨간 네모 안에 있는 것들이다

먼저 프로젝트 내의 ioc 파일을 클릭해서 LED가 어디 핀에 연결되어 있는지 확인해보자

LD1, LD2, LD3 각각 Port B 0, 7, 14에 연결되어 있는 것을 확인할 수 있다

이렇게 활성화 되어 있는 핀은 main.h에 정의되어 있는데

위와 같이 정의되어 있고 다이렉트로 포트와 핀 번호를 사용해도 되지만, 라벨링한 이름으로 사용해도 상관없다

 

main.c로 와서

main의 while (1) 내부에 아래와 같은 코드를 작성하자

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */  
	  HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);	// LED1
	  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);	// LED2
	  HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);	// LED3
	  HAL_Delay(100);							// 100ms delay
	  
//	  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);	// LED1
//	  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);	// LED2
//	  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14);	// LED3
//	  HAL_Delay(100);							// 100ms delay
  }
   /* USER CODE END 3 */

주석 처리한 부분과 실행 코드는 동일한 의미

코드는 반드시 USER CODE BEGIN과 USER CODE END 사이에 작성해야한다

그렇지 않으면 나중에 코드 생성할 때 지워져버림

 

코드를 설명하자면 while문을 계속 반복하는데,

처음 코드를 만나면 LED 1, 2, 3을 켰다가 100ms만큼 기다리고 다시 while문의 처음으로 가서 코드를 만나면 LED 1, 2, 3을 껐다가 100ms만큼 기다리고 또 다시 while문의 처음으로 가서 코드를 차례대로 읽는다

이러한 과정을 계속 반복해서 LED 1, 2, 3이 동시에 켜졌다가 꺼졌다가를 반복하게 된다

 

반응형