Chapter 1.
개발 보드 = MCU를 사람이 쓰기 쉽게 PCB에 붙여놓은 보드, USB, 버튼, LED, 커넥터 등 추가 / ex) NUCLEO-F429ZI
MCU = CPU(코어) + 주변장치(Peripherals) + 메모리까지 전부 결합된 완전체 칩 / ex) STM32F429ZI
CPU = MCU 안에서 연산만 담당하는 부분 / ex) Arm Cortex-M4 Processor
버튼을 눌렀을 때 in / out 코드 리뷰 ≫ LED로 표현하기
Chapter 2.
목표
- NUCLEO 보드와 PC가 시리얼 통신(Serial Terminal)을 사용해 주고받는 방법 이해
- STM32 MCU의 UART 기능을 사용해서 PC와 데이터를 공유하는 프로그램 작성
- 시리얼 통신 기본 개념 설명
USB vs UART ?
USB는 통신 규격 + 포트형태 / UART는 통신방식(프로토콜 + 신호선)
즉, USB는 복잡한 고속 직렬 통신 규격
우리가 라즈베리파이 같은 개발보드에 USB만 꽂아도 UART가 되는 이유는 이미 PC가 인식하는 USB와 보드가 인식하는 UART 사이에서 컨버팅해주는 칩이 내장 되어있기 때문이다.
간단한 코드 사용
aButton.mode(PullDown); / a버튼을 누루지 않으면 입력이 없을 때 0V로 유지한다.
기존에 예시로 든 코드는 그냥 난잡하게 사용되었지만, 이걸 함수로 나눠줌
void inputsInit(); → 모든 입력 핀의 pull-down 설정
void outputsInit(); → 모든 LED 초기 상태 세팅
void alarmActivationUpdate(); → 센서 확인 + 알람 ON 처리
void alarmDeactivationUpdate(); → 비밀번호 처리 + 알람 OFF 처리
Doxygen?
소스 코드에서 자동으로 문서를 생성해주는 툴. 소스코드에 주석을 달아두면 자동으로 저장됨. 프로젝트에서 좋음
예시 2.1. PC로 알람 상태 모니터링
목표는 NUCLEO 보드와 PC 사이에서 데이터를 주고 받는 함수와 메서드를 소개
uartTask(); = PC로부터 UART 데이터가 오는지 확인하는 기능
UnbufferedSerial uartUsb(USBTX, USBRX, 115200); // UART 객체 생성

uartUsb.readable()을 통해 UART에 읽을 문자가 있는지 확인한다.
있다면 uartUsb.read()를 사용하여 문자 1개를 읽어 receivedChar에 저장한다.
만약 받은 문자가 '1'이라면:
alarmState가 true면 “The alarm is activated” 출력
false면 “The alarm is not activated” 출력
'1'이 아니라면:
availableCommands()를 호출해 가능한 명령 목록을 출력한다.

1만 사용 가능하다고 알려줌
만약 uartTASK를 확장하고 싶다?

이런식으로 PC에서 누른 숫자에 맞춰 출력 가능 문장들 확장
예시 2.2. 온도초과 & 가스 감지 상태를 PC로 모니터링하기


1, 2, 3을 PC에서 누르면 보드에서 감지.
보드에서 PC로 감지했는지 출력
PC에서 출력
예시 2.3. PC로 알람 비활성화하기

기존에는 보드 내에 버튼 입력으로 비밀번호를 입력했음
A, B, C, D 버튼을 입력하는 것인데.
정답은 1 1 0 0 이다.
이를 PC에서 4를 누르면 PC에서 비밀번호를 맞추는 모드로 이동한다.
1100을 맞추면 알람 off
틀리면 incorrect code LED 켜짐. 코드 5번 틀리면 System Blocked LED ON.
다시 4 눌러서 코드 1100 입력하면 system unblock 됨
예시 2.4. 배열과 for문으로 코드 유지보수성 개선
반복문으로 비교한다. / 변수 줄이기

예시 2.5. 정답 Code를 PC에서 변경
5번을 눌러서 변경. 코드 순서를 입력한 순서대로 넣음

UART 통신이란?
- TX, RX, GND 가 필요하다. 이때, 연결하는 A,B는 같은 기준의 GND를 연결해야한다.(A,B GND는 연결)
1byte 기준의 UART 신호의 구조

- Little Endian 형태로 전송한다. ex) 00110001 을 전송하려면 1- 0 - 0 - 0 - 1 - 1 - 0 - 0 순서로 전송된다.
- 115200 baud 일 때 비트 하나의 시간. 115,200 bit/s 즉 1 bit = 8.68us / 한 바이트 전송에는 10bit가 필요하므로 86.8us 걸림, 이는 PC랑 양쪽 모두 속도가 같아야 한다 그래야 안깨짐
'부트캠프' 카테고리의 다른 글
| 코딩테스트에 필요한 C++ (set, vector, queue) (0) | 2026.01.20 |
|---|