가장 쉬운 LED ON/OFF를 해보자 .

 

먼저 프로젝트를 만들고 Clock & Configuration에서 Clock을 설정하자 

HSI  : 내부 클럭 
HSE : 외부 클럭
PLLCLK : 내부 클럭 또는 외부 클럭을 적절히 곱하거나 나누어 원하는 클럭으로 만들어 사용 

 

클럭은 PLLCLK을 사용하여 32Mhz를 만들었다. 

(내부 16Mhz / 16 * 192 / 6 = 32 Mhz  ,  일단 APB~~등등은 동일하게 설정)

 

Pinout & Configuration에서 이제 LED Pin을 설정한다. 

먼저 사용할 LED인 LD1과 연결된 Pin을 회로도에서 확인한다. 

또한 회로도에서 LED 다이오드의 방향을 보면 PI1에서 Output을 출력해야 LED가 켜지는 것을 확인할 수 있다.

 

LD1은 PI1과 연결되어 있으므로 핀맵에서 PI1을 찾는다. 

직접 찾아도 되지만 아래 검색을 이용하면 더 쉽게 찾을 수 있다

PI1을 클릭하고 GPIO_Output으로 선택하면 해당 핀이 초록색으로 변하고 이름이 GPIO_Output으로 변한다.

코드를 작성할 때 편의를 위해서 해당 핀을 다시 우클릭하고 Enter User Label을 눌러 LED1로 이름을 바꿔준다.

핀 선택이 잘되었다 보고 싶으면 System Core의 GPIO 창을 눌러 확인한다. 

확인까지 하였으면 상단 메뉴의 톱니바퀴 모양인 Code Generation을 눌러 코드를 생성해보자

 

Core - Src - main.c 를 확인해보면 설정한 클럭과 GPIO핀(LED1)들이 main함수 시작에서 초기화 되는 것을 확인할 수 있다. 

 

main.c
clock config
LED1 init

 

이제 설정은 끝났고, HAL 라이브러리를 사용하여 설정한 LED를 조작해보자.

 

LED1은 GPIO핀으로 출력을 조절하여 LED를 On/Off 할 수 있고 다음 HAL 함수를 통해 GPIO 출력을 조절할 수 있다. 

 

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

 

GPIOx에는 GPIO 구조체의 포인터를, GPIO_Pin에는 해당 핀을, PinState에는 출력을 할려면 1(=GPIO_PIN_SET) 아니면 0(GPIO_PIN_RESET)을 넣으면 된다.

 

PI1핀의 이름을 LED1로 바꾸었기에 아래와 같이 메인 소스를 작성하면 1초 간격으로 LED가 On/off를 반복하는 것을 볼 수 있다. 

(이름을 바꾸지 않았다면 구조체는 GPIOI~ , 핀은 GPIO_PIN_1 등으로 설정되며 알아보기가 힘들 수도 있다. )

동작은 정말 간단한다. 

LED1에 출력을 High로 주었다가 Low로 주었다가를 반복하면 된다. 

 

해당 소스를 빌드해서 이제 넣으면 되는데 어떻게 넣을까? 

상단의 Run을 눌러도 되고 Debug를 눌러도 된다. (단 Debug의 경우 빌드를 먼저 해야함)

이 때 Debug Configurations 나 Run Configurations를 눌러 Debugger 설정을 할 수 있다. 

Debugger 설정을 다음과 같이 ST-Link로 해주면 전원을 넣는다고 연결한 USB를 통해서도 프로그램을 올릴 수 있다.  

 

이제 Run 버튼을 누르면 해당 프로그램이 올라간다. 

 

실제 보드가 1초 간격으로 On/Off 되는 것을 확인할 수 있다. 

 

반응형

+ Recent posts