지난 여름방학때 아두이노를 했다면 이번 겨울방학때는 본격적으로 임베디드 구현을 해보려고 한다.
STM32칩으로 시작을 해보자.
환경 구성
임베디드 개발에 있어서 환경구성을 하는것이 반을 차지할정도로 상당히 중요한 부분이며 시간도 상당히 오래걸린다.
준비물
stm32 개발보드 (누클레오, 제작보드 등), STlink, 점퍼선, 케이블
첫번째로 STM32 cube ide를 설치해준다. 이 프로그램은 arm컴파일러와같이 통합환경을 제공해주는 프로그램이다. 여러개로 흩어진 파일을 하나로 관리를 하면서 쉽게 다룰 수 있는 장점이 있다.
아두이노 IDE와 비슷한 프로그램이라고 생각하면 된다.
STM32CubeIDE - Integrated Development Environment for STM32 - STMicroelectronics
이제 프로그램을 설치하고 file - new- stm32 project를 눌러서 코딩을 실컷 해주면 된다. 자바의 이클립스 기반으로 만들어진 프로그램이라 이와 비슷한 툴을 써봤으면 쉽게 사용할 수 있다.
사용할 칩셋을 선택해주면 된다.(STM32F103C8)
칩셋 선택 후 이름을 만들어주면 다음과같이 디렉토리가 생길것이다.
이제 남은것은 (디렉토리명 - Core - Src - main.c) 경로에서 실컷 코딩을 해주면 된다.
아, 물론 각각의 칩에서 핀번호를 알아야 하기때문에 .ioc로 끝나는 디렉토리를 더블클릭해주면 다음과같은 칩화면이 나올 것이다.
여기서 이제 핀번호를 선택해서 구현하고싶은 명령을 핀번호에 맞게 코드를 작성해주면 된다.
avr에서는 일일이 데이터시트를 보면서 핀 번호 하나하나 다 코드로 작성해야하지만 stm은 UI에서 마우스로 어떤작업을 할지 선택하면 그에 맞는 변수가 자동으로 생성이 되고 원하는 동작을 하도록 코드를 다시 작성해주면 된다.
이게 정말정말 매우매우 편한 stm을 이용하는 임베디드 개발의 장점이다.
이제 기본적인 환경설정은 마쳤으니 간단한 gpio제어를 해보자.
GPIO LED 깜빡이기
처음 프로그래밍을 시작하면 'hello world' 를 띄우듯이 임베디드 개발에서는 led를 깜빡이는 것이 비슷한 역할이다.
개발보드는 커널창이 없기 때문에 hello world를 보지 못하므로 gpio제어를 통해 확인해야 한다.
첫번째로 특정 핀을 선택해서 led를 깜빡이게할지 정해야 한다.
PC13번핀을 선택
level out : High(출력)
GPIO mode : Output Push Pull
GPIO Pull-up/Pull-down : Pull-down
Maximum output speed : High
User Label(변수 이름 설정) : GPIO_LED
위와같이 설정 후 저장을 누른다음 main.c 디렉토리로 가보면 중간에
이런 변수가 생성되는것을 확인 할 수 있다. 바로 우리가 핀을 설정한 함수가 생성됐으며 아래로 쭉 내리다보면 해당 함수에 관한 내용을 확인 할 수 있다.
LED를 제어하기위해 위의 함수를 참고하면 된다.
이제 main함수에서 코드를 작성하면 되는 데 여기서 주의할점은
main.c 안에 반드시 while(1)문 안에서 작성해야 한다.
아두이노에서도 마찬가지지만 임베디드 프로그래밍은 while(1)이라는 무한반복문 안에서 실행이 되어야 한다.
위와 같이 작성해주면 성공적으로 LED가 0.1초마다 깜빡이는 것을 확인 할 수 있다.
스위치를 통해 LED깜빡이기
현재 사용하고있는 보드의 회로도를 보면 스위치가 몇번핀에 연결되어있는지 확인할 수 있으며
해당 핀번호에 맞게 프로그램을 짜면 된다.
스위치2번이 PA0와 연결되어 있기 때문에 PA0에 GPIO_INPUT 풀업모드로 설정한다.
다음으로 무한루프문에 다음과같이 코드를 작성하면 스위치를 누르면 LED ON, 떼면 OFF하는 동작을 하게 된다.