STM32 입문 프로그램에 해당하는 'LED 깜빡이기' 프로그램을 구현하는 과정에 대한 설명입니다.
아래 과정은 아래 환경과 보드를 이용했습니다.
- Windows 11 Home
- STM32CubeIDE-1.11.2
- STM32 NUCLEO-F103RB 보드
1. 프로젝트 생성하기
- STM32CubeIDE 프로그램 메뉴에서 'File >> New >> STM32 Project'를 선택합니다.
- 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
◦ 'Board Selector' 탭을 선택합니다.
◦ 'Commercial Part Number'에 'LUCLEO-F103RB'를 입력합니다.
◦ 아래쪽 'Board List'에서 'LUCLEO-F103RB'를 선택합니다.
◦ 'Next' 버튼을 눌러서 다음단계로 이동합니다.
- 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
◦ 'Project Name'을 입력합니다.
◦ 'Finish' 버튼을 눌러서 프로젝트를 생성합니다. - 아래 그림과 같이 프로젝트가 생성되고 'Pinout & Configuration' 화면이 실행됩니다.
2. GPIO 핀 설정 및 소스코드 생성하기
- 'Pinout & Configuration' 화면에서 다음 순서대로 진행합니다.
◦ 좌측 트리에서 'System Core'를 선택합니다.
◦ 트리 하단 항목에서 'GPIO'를 선택합니다.
◦ Pin 목록에서 'PA5'를 선택합니다.
◦ 'User Label'을 LED로 변경합니다.
- 'Ctrl + S'를 누르면 자동으로 코드가 생성되거나 아래와 같이 툴바에서 'Code Generation' 버튼을 눌러서 코드를 생성합니다.
- 아래 그림과 같이 코드가 생성된 것을 확인할 수 있습니다.
아래 코드 중 'LED_Pin', 'LED_GPIO_Port'는 이전에 지정한 User Label 값에 따라서 자동으로 생성된 코드입니다.
3. LED 깜빡이는 코드 작성 및 컴파일
- 프로젝트 > Core > Src > main.c 파일을 열어보면 아래와 같이 코드에 주석이 있는 것을 확인할 수 있습니다.
주석 중 /* USER CODE BEGIN # */'과 /* USER CODE END # */' 사이에 코드를 작성해야 자동생성으로 코드를 다시 생성하더라도 작성된 코드가 유지됩니다.
- 지속적으로 LED를 깜빡이기 위해서 while 문 안에 코드를 작성합니다.
위치는 /* USER CODE BEGIN 3 */ 과 /* USER CODE END 3 */ 사이에 아래 코드를 작성합니다.
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); // LED On
HAL_Delay(500);
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // LED Off
HAL_Delay(500);
- 툴바에서 'Build Debug' 버튼을 눌러서 컴파일 실행합니다.
- 아래 그림과 같이 컴파일 결과를 확인할 수 있습니다.
4. 다운로드 및 디버깅
- 컴파일된 프로그램을 STM32 보드에 다운로드하고 실행하는 과정입니다.
- STM32 보드를 컴퓨터에 연결합니다.
- 툴바에서 'Debug' 버튼의 아래쪽 화살표를 클릭한 후 'Debug Configuration'을 실행합니다.
- 아래와 같이 실행된 화면에서 다음 순서대로 진행합니다.
◦ 'STM32 C/C++ Application'을 선택합니다.
◦ 'New launch configuration'을 선택합니다.
- 아래와 같은 화면이 실행됩니다.
- 아래 화면에서 다음 순서대로 진행합니다.
◦ 'Debug'을 탭을 선택합니다.
◦ 'ST-LINK S/N'을 선택합니다.
◦ 'Scan' 버튼을 눌러서 STM32 보드를 찾습니다.
◦ 목록에서 적당한 STM32 보드를 선택합니다.
◦ 'Apply' 버튼을 눌러서 설정을 적용합니다.
◦ 'Debug' 버튼을 눌러서 프로그램 다운로드 및 실행을 시작합니다.
- 프로그램이 실행된 후 아래와 같이 'main.c' 파일의 'HAL_Init()' 함수에 브레이크 포인트가 잡힐 때까지 기다립니다.
툴바의 'Resume' 버튼을 눌러서 프로그램을 진행합니다.
- 아래 그림과 같이 LD2 부분에서 초록색 LED가 깜빡이는 것을 확인할 수 있습니다.
상단의 LD1 LED는 디버거 상태를 표현하는 LED로 디버거가 동작중일 때 깜빡입니다.
- 상단 툴바의 'Terminate' 버튼을 누르면 디버거가 종료됩니다.
이때 디버그 상태를 표현하는 LD1 LED는 깜빡임이 멈추지만 프로그래밍된 LD2 초록색 LED는 지속적으로 깜빡이는 것을 보아 프로그램이 STM32에 잘 설치되어 동작되는 것을 확인할 수 있습니다.
'로봇 > STM32' 카테고리의 다른 글
STM32 UART로 보드 제어하기 (1) | 2023.03.01 |
---|---|
STM32 Button을 누르면 UART로 메시지 출력하기 (2) | 2023.02.28 |
STM32 Button Interrupt를 이용한 LED 제어 (0) | 2023.02.28 |
STM32 Button을 이용해서 LED 깜빡이기 (0) | 2023.02.22 |
STM32 개발환경 설정하기 (0) | 2023.02.21 |