안경잡이개발자

728x90
반응형

Blinky 예제는, 일반적으로 새로운 MCU를 다루게 되었을 때 가장 먼저 실습해보는 예제라고 할 수 있습니다. 흔히 새로운 프로그래밍 언어를 공부할 때 "Hello World"를 출력해보는 것과 같습니다. Blinky 예제는 구체적으로 GPIO 출력을 이용해 보드에 내장된 LED를 켜고 끄는 예제입니다. 제가 실습할 보드인 Nucleo-144도 내장 LED를 가지고 있기 때문에, 간단하게 Blinky 예제 실습을 진행할 수 있습니다.

 

일단 지난 시간에 설치했던 STM32CubeIDE를 이용하여 [New] - [STM32 Project]로 이동하여 새롭게 STM32 프로젝트를 생성해주도록 하겠습니다.

STM32 제품군 보드(Board)로는 다양한 종류가 있습니다. 따라서 자신이 가지고 있는 보드를 검색 및 선택하여, 그 보드에 맞게 개발환경을 구축하시면 됩니다. 저는 Nucleo-144 F747ZI 모델을 가지고 있기 때문에 이를 선택하였습니다.

다음과 같이 적당한 이름을 선택하여 기본 설정 그대로 프로젝트를 만들 수 있습니다.

 

기본적으로 주변 장치 초기화 항목에 대해서는 [Yes]를 클릭합니다.

또한 Eclipse IDE 형식의 개발환경을 STM32CubeMx 개발 전용으로 Perspective를 변경할 수 있습니다.

그러면 다음과 같이 기본적인 소프트웨어 패키지가 설치됩니다.

설치가 완료된 이후에는 다음과 같이 프로젝트가 초기화됩니다.

실질적인 소스코드는 main.c 파일을 수정하시면 됩니다. 여기에서 main() 함수에 있는 while 구문 안에 우리가 동작시키고자 하는 프로그램의 세부 소스코드를 작성하면 됩니다. 이 부분은 아두이노(Arduino) 프로그램을 개발하는 것과 거의 유사하다고 보시면 됩니다.

프로젝트를 생성하면 기본적으로 확인할 수 있는 .loc 파일에서는 특정한 핀이 LED 기능을 담당하는 것을 알려주고 있습니다. 저는 기본적으로 색상별로 3개의 LED가 활성화되어 있네요.

실제로 main.c 파일의 MX_GPIO_Init() 함수를 살펴 보시면, 3개의 GPIO Pin에 대한 설정 코드를 확인할 수 있습니다.

따라서 다음과 같이 while() 구문 안에 3개의 LED Pin이 모두 1초에 한 번씩 토글되도록 만들 수 있습니다. 바로 이 부분만 넣어주게 되면 Blinky 예제 완성입니다.

기본적으로 빌드(Build)는 [Project] - [Build Project]에 들어가시면 진행하실 수 있습니다.

그러면 다음과 같이 [Console] 탭에서 빌드가 정상적으로 진행이 된 것을 확인할 수 있습니다.

이제 USB를 이용해서 가지고 있는 장치를 연결해야 합니다. 실제로 우리가 작성한 소스코드를 장치에 업로드하기 위해서는 당연한 절차라고 할 수 있습니다.

 

USB를 연결한 뒤에 [Run] - [Debug As] - [STM32 Cortex-M C/C++ Application]를 눌러서 디버깅을 진행할 수 있습니다. 디버깅 모드로 실행을 하시면 코드를 한 줄 한 줄 실행하면서 동작 과정을 살펴 볼 수 있습니다.

이후에 기본 옵션으로 디버깅을 진행하려고 하면, 다음과 같이 ST-LINK Firmware 업그레이드(Upgrade)가 필요하다는 메시지가 나올 수 있습니다. 여기에서 말하는 ST-LINK는 STM32 보드에 있는 USB 디버깅 장치를 의미하는 겁니다. 당연히 보드와 연결한 뒤에 프로그램을 업로드하려면, USB를 통해 업로드해야하기 때문에 관련 USB 펌웨어가 필요합니다. 그래서 ST-LINK 디바이스의 펌웨어 업그레이드가 필요하다는 메시지가 나오면 업그레이드를 진행해주시면 됩니다.

그러면 다음과 같이 STLinkUpgrade 프로그램을 받아 실행하게 되고 [Open in update mode]를 누른 뒤에 [Upgrade] 버튼을 누르면 업그레이드가 진행됩니다.

업그레이드가 다 되었네요.

업그레이드가 된 이후에 다시 디버깅을 진행하면, 정상적으로 진행됩니다.

이후에 디버깅 모드에 맞게 Perspective를 변경(Switch)하라는 메시지가 나옵니다. 그래서 [Switch] 버튼을 누르면 디버깅하기 편한 형태로 개발 환경의 모습이 바뀌게 됩니다.

이제 정상적으로 프로그램이 로드되어, 코드를 순차적으로 실행하여 테스트할 수 있게 됩니다. Step Over (F6) 버튼을 누르게 되면 한 줄씩 실행할 수 있습니다.

그래서 다음과 같이 아까전에 우리가 작성했던 HAL_GPIO_TooglePin(GPIOB, LD1_Pin|LD2_Pin|LD3_Pin); 라인을 실행하게 될 때 보드에 내장되어 있는 LED가 빛나게 됩니다. 실제로 보드를 확인해 보시면 LED 부분이 점멸됩니다. 또한 디버깅을 모두 마친 이후에 실제로 배포(Release)를 하고자 할 때는 다음과 같이 [Release]에 체크를 진행해주시면 됩니다.

이제 아까와 마찬가지로 [Run]을 할 때 Release 폴더에 있는 .elf 파일로 업로드를 진행하면 됩니다.

 

그러면 이제 보드 자체에 해당 .elf 파일이 업로드가 된 것이기 때문에, 한 줄씩 직접(Manually) 코드를 실행하지 않아도 자동으로 무한 반복하여 우리가 작성한 코드를 실행합니다. 보드에 전원 공급을 해주기만 하면, 바로 우리가 작성했던 소스코드에 맞게 동작합니다.

위 빨간색으로 박스를 친 부분의 세 LED가 모두 1초마다 동시에 스위치(Switch) 됩니다.

728x90
반응형