앞서 다뤘던 ATmega128A와 FPGA와는 다른 MCU중 하나인 STM32를 다뤄볼 것이다. 먼저 STM32에 대해 알아보자.
1. STM32란?
간단히 말해서 현업에서 자주 쓰이고 이전에 다뤘던 ATmega128A보다 높은 메모리와 클럭을 가진 다양한 모델군이 존재하는 MCU라고 생각하면 된다. STM32의 경우, 너무나도 다양한 모델이 존재하기에 딱 하나를 짚어서 성능을 소개하기는 애매하지만 단순하게 여타 다른 MCU보다 뛰어난 제품군이 존재하고, 범용성이 넓다고 생각하자.
2. STM32 사용을 위한 프로젝트 추가하기
먼저 개발환경은 STM32CubeIDE 1.12.0를 사용하고, Board는 ARM Cortex-M 시리즈의 NUCLEO-F411RE를 사용할 것이다. USB를 연결하고, 프로젝트를 추가해보자.
STM32CubeIDE 1.12.0를 켰다면, File - New - STM32 Project 경로로 들어가 프로젝트를 아래와 같이 추가한다.
위와 같은 창이 뜬다면, Board Selector탭에서 바로 아래 Commercial Part Number에서 사용할 Board의 이름을 검색한다. 그러면 아래 Board List에서 Board의 이름을 확인하고 Next로 넘어간다.
다음으로 넘어왔다면 위 노란색 표시에서 프로젝트 이름과 경로를 잘 설정해주자.
3. STM32로 LED(GPIO 출력) 제어해보기 (500ms마다 LED ON/OFF Toggle)
프로젝트를 추가하였다면 개발환경 왼쪽 박스에서 위와 같은 프로젝트가 생성됨을 알 수 있다. 노란색 부분을 더블클릭하자.
노란색 부분을 더블클릭하면 위와 같이 포트를 설정할 수 있는 화면이 켜진다. 포트B의 0번부터 7번까지의 출력을 통해서 LED를 제어할 것이다. 따라서 포트 B GPIO의 출력을 사용할 것이므로 PB0부터 PB7까지 GPIO_Output으로 할당해주자.
포트의 출력 할당을 마쳤다면 Core-Src 경로에 led.c 파일을 새로 추가하자.
마찬가지로 led.c 파일을 추가했다면 Core-Inc 경로에 led.h 파일을 새로 추가하자.
먼저 우리가 추가한 led.h 헤더파일에는 main.h 파일을 include시켜주어야 한다. main.h 파일은 주로 전역 변수, 함수 프로토타입 및 헤더 파일을 포함하는 역할하므로 꼭 포함시켜주어야 한다. 이 main.h 파일은 주로 프로젝트의 전반적인 설정과 초기화를 담당한다. 따라서 만약 led.h에서 초기화 관련 코딩을 담당하기 위해 기본적으로 위와 같이 main.h파일을 추가해주자.
led.c 파일에서는 led.h파일을 include 한다. led.h파일에서 변수를 초기화할 경우, led.c에서 사용해야하기 때문에 기본적으로 include를 해주는 것이 좋다.
led.h를 include 했다면 본격적인 PORTB 출력에 대한 코딩을 led.c에서 진행한다. 먼저 해당 PIN에 1(LED ON)이나 0(LED OFF)으로 출력하기 위해서 HAL_GPIO_WritePin() 함수를 써준다. 이 함수를 통해 각 포트에 값을 할당할 수 있다. 파라미터에 포트 이름, 포트 위치(16진수), 입력 값을 각각 넣어주어 값을 할당할 수 있다. 이를 통해 led_all_on함수와 led_all_off 함수를 작성한다.
이렇게 만든 led_all_on과 led_all_off함수를 이용하여 led_main이라는 함수를 만들어 500ms동안 껐다 켜졌다를 반복하도록 함수를 호출한다. 여기서 HAL_Delay함수는 C에서 _delay_ms함수와 같다고 생각하면 된다. HAL_Delay함수를 이용하여 500ms의 딜레이를 주어 함수를 작성한다.
led.c에서 led 출력에 관한 함수를 작성을 마쳤다면, main.c에서 led_main 함수를 extern을 통해 다시 선언해준다. 이때, 함수를 선언하는 구간은 위 주석처리된 USER CODE BEGIN 과 END 사이에 넣어준다.
main.c의 main 함수로 들어와서 아래 노란색으로 표시된 while문 내에서 led_main함수를 호출한다. 이렇게 되면 main함수에서 LED가 껐다 켜졌다를 while문을 통해 무한 반복하게 된다.
4. 500ms마다 LED ON/OFF Toggle 작동결과 영상
'STM32' 카테고리의 다른 글
[STM32] STM32에서 스텝 모터 동작 시키기 (0) | 2023.08.13 |
---|---|
[STM32] UART를 이용한 Circular Queue 구현 (0) | 2023.08.13 |
[STM32] STM32F429ZI 사용하기 (0) | 2023.08.13 |
[STM32] STM32의 타이머 카운터 (0) | 2023.08.13 |
[STM32] STM32에서 LED와 버튼 제어 (0) | 2023.08.13 |