임베디드 시스템 아키텍처(다니엘 라키메라 저) + 인터넷에 떠도는 자료를 이용해서 실습을 진행하였다. 실습의 목표는 ST의 NUCLEO-F103RB 보드를 이용하여 시스템 클락 설정, 입출력, 인터럽트 설정 등을 해보는 것이다. 실습의 취지에 맞추어 외부 라이브러리를 사용하지 않고, 데이터 시트를 읽으며 실습을 진행할 예정이다.
실습 환경
- 실습 보드 : NUCLEO-F103RB
- MCU : STM32F103RB
- 코드 에디터 : STM32CubeIDE, Vscode
- 사용 언어 : C
타겟 보드에 대한 간단한 스펙( NUCLEO-F103RB)
- STM32 microcontroller in an LQFP64 or LQFP48 package
- 1 user LED shared with ARDUINO®
- 1 user and 1 reset push-buttons
- 32.768 kHz crystal oscillator
- Board connectors - ARDUINO® Uno V3 expansion connector, ST morpho extension pin headers for full access to all STM32 I/Os
- Flexible power-supply options
- On-board ST-LINK debugger/programmer with USB re-enumeration capability
- 24 MHz or 48 MHz HSE
- User USB Device full speed, or USB SNK/UFP full speed
더 자세한 것은 데이터시트 참조할 것
실습을 진행함에 있어서 STM32CubeIDE, Vscode 중 하나만을 선택해도 된다. 다만 Vscode를 이용하여 개발하기 위해서는 추가적인 개발 환경 세팅이 필요하다. 굳이 내가 꼭 Vscode를 사용해야 할 것 같다는 게 아니라면 CubeIDE를 사용하자. Vscode로 임베디드 시스템 환경을 조성하는 것은 다음에 한 번 다루어 보겠다.
해당 실습을 진행하기 위해서는 기본적으로 C 언어를 사용할 줄 알아야 한다. 특히 포인터와 비트 연산자에 대해서는 어느정도의 이해를 갖출 필요가 있다. 기본적으로 보드를 조작하기 위해서는 레지스터의 값을 조작해야하는 데, 이 과정에서 포인터와 비트연산을 사용하기 때문이다. 컴퓨터 구조에 대한 약간의 지식이 있다면 실습을 진행하는 데 보다 편하고 유익할 것이다. 개인적으로 책을 읽으면서 실습을 하거나 유튜브에 마이크로컨트롤러 강의를 검색해서 수강하면서 듣는 것을 추천한다.
실습에 앞서서 우리가 다루는 것이 정확히 무엇인지 알 필요가 있다. 우리가 사용하는 개발보드에서 가장 핵심이 되는 부품은 바로 마이크로컨트롤러(Microcontroller)이다. 마이크로컨트롤러는 마이크로프로세서(Microprocessor)와 입출력 모듈을 하나의 칩으로 만들어 정해진 기능을 수행하는 컴퓨터이다.
마이크로컨트롤러를 부착한 보드와 우리가 사용하는 PC는 사실 차이가 없다. 둘다 CPU를 중심으로 주변장치가 결합된 형태이며, 본질적으로 간단한 LED를 켜는 것과 온라인에서 게임을 하는 것 모두 깊숙히 파고 들면 메모리에 있던 0과 1로 이루어진 데이터를 CPU가 읽으면서 주변 장치를 제어하는 것과 다를 바가 없다.
마이크로컨트롤러는 PC와 다르게 다양한 기능을 수행할 필요가 없으며 높은 성능을 요구하지 않는다. 그렇기에 일반적인 어플리케이션 프로그래밍과 다르게 임베디드 프로그래밍은 제한된 환경(저성능 CPU, 적은 메모리 등)에서의 최적화에 보다 초점이 맞추어져 있다. 심지어 OS(Operating System)이 설치되지 않은 상태로 직접 조작하는 경우도 많다.(이번 실습도 그러하다!!) 이번 실습을 통해서 평소에는 생각해볼 필요가 없었던 컴퓨터의 물리적인 동작 원리에 대해 생각해볼 수 있을 것이다. 굳이 임베디드 계열에 관심이 있는 것이 아니더라도 컴퓨터의 기저동작에 대한 이해는 개발에 있어서 큰 도움이 될것이라 생각한다.
다음 글부터는 본격적으로 실습에 대해서 기록할려고 한다. 이것으로 글을 마친다.
'뭐라도 만들어보자!!( 프로젝트 ) > 임베디드' 카테고리의 다른 글
5. 임베디드 실습 : GPIO + Systick (1) | 2024.01.26 |
---|---|
4. 임베디드 실습 : Main System Clock Source (1) | 2024.01.23 |
3. 임베디드 실습 : NVIC ~ 빈 main() (1) | 2024.01.23 |
2. 임베디드 실습 : ldscript 작성 (0) | 2024.01.21 |
1. 임베디드 실습 : 전체적인 그림 (0) | 2024.01.19 |