오늘은 집에서 놀고 있는 STM32F407VG-DISC1 보드로 USB Virtual COM Port (VCP) 를 구현해서 PC(Tera Term) 과 통신하는 과정을 처음부터 차근차근 정확하게 안내해드릴게요.
1. 개요
STM32F407 보드는 USB Full-Speed Device 컨트롤러가 내장되어 있습니다.
이걸 이용해서 PC에 "가상 COM포트(USB CDC)" 장치처럼 보이게 만들 수 있어요.
즉, USB 케이블 하나로 MCU와 PC를 UART처럼 통신할 수 있게 됩니다.
※ CDC: Communication Device Class = USB를 통해 시리얼 포트처럼 통신하는 USB 표준
2. 준비물
- STM32F407VG-DISC1 보드 (집에서 놀고 있는...)
- USB Micro-B 케이블 (보드 연결용)
- STM32CubeIDE (개발 툴)
- Tera Term (PC 통신용 터미널 프로그램)
- Windows 드라이버 (필요시 자동 설치 또는 STM 드라이버 수동 설치)
3. 연결 방식
STM32F407 보드는 기본적으로 2개의 USB 커넥터가 있습니다.
- CN1: ST-LINK용 (디버그용 USB, 통신 아님)
- CN5: USB OTG FS 포트 (이걸 사용해야 해요)
▶ CN5 (USB_OTG_FS) 단자에 USB 케이블 연결할 겁니다.
이걸로 Virtual COM 통신을 합니다.
4. CubeIDE 프로젝트 생성
① STM32CubeIDE 실행
② [File] → [New] → [STM32 Project] 클릭
③ Board Selector 에서 "STM32F407VG-DISC1" 입력하고 선택
④ 프로젝트 이름 설정하고 [Finish]
✅ 여기까지 하면 기본 프로젝트가 하나 만들어집니다.
5. CubeMX 설정 (USB 설정)
CubeMX 화면에서 핀 설정 및 미들웨어 추가해줄게요.
[핀이름 설정]
- USB_OTG_FS 모듈을 Device Only 모드로 활성화해야 해요.
CubeMX 좌측 트리에서
- "Connectivity" → "USB_OTG_FS" → 모드 선택: Device_Only
[Middleware 설정]
- "Middleware" → "USB_Device" 활성화 → "Communication Device Class (CDC)" 선택
✅ 이렇게 하면, 자동으로 필요한 USB Stack이 추가됩니다.
참고: USB FS PHY는 내부 PHY 사용합니다. 외부 PHY 필요 없음.
6. Clock 설정
USB는 정확한 48MHz 클럭이 필수입니다.
CubeMX에서 Clock Configuration 들어가서:
- HSE (외부 크리스탈 8MHz) 사용
- PLL 세팅해서 USB Clock 48MHz가 나오게 조정
(보통 STM32F4 Discovery 보드는 HSE가 기본으로 설정되어 있고, 별 조정 필요 없을 수도 있어요.)
7. 생성된 코드 확인
이제 [Project Manager] 탭에서 코드 생성 후 열기.
중요한 기본 함수들:
- MX_USB_DEVICE_Init() → USB 디바이스 초기화
- CDC_Transmit_FS() → 데이터 송신 함수 (PC로 데이터 보낼 때 사용)
CubeIDE에서 자동으로 USB CDC 예제 코드를 넣어줍니다.
8. 코드 수정 (통신 테스트용)
usb_device.c 파일에서 USB 초기화 코드가 이미 되어 있습니다.
이제 메인루프에서 간단한 테스트 코드를 추가할게요.
main.c 파일 수정:
#include "usb_device.h"
#include "usbd_cdc_if.h" // CDC 함수 사용하려고 필요
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_USB_DEVICE_Init();
while (1)
{
char msg[] = "Hello PC via USB CDC\r\n";
CDC_Transmit_FS((uint8_t*)msg, strlen(msg)); // PC로 데이터 전송
HAL_Delay(1000); // 1초마다 전송
}
}
✅ 이렇게 하면 MCU가 USB를 통해 1초마다 PC로 "Hello PC via USB CDC"를 보내게 됩니다.
9. PC 연결 (Tera Term)
- STM32F407 보드에 CN1 USB 포트로 연결
- Windows에 자동으로 STM32 Virtual COM Port Driver가 설치됨
- 장치관리자에서 COM 포트 추가된 것 확인
- (혹시 자동설치 안되면 수동으로 STM 드라이버 설치 가능)
- Tera Term 실행
- Serial → 새로 생긴 COM포트 선택
- 통신속도는 USB CDC라서 아무거나 괜찮지만 기본 115200bps 추천
화면에 1초마다 "Hello PC via USB CDC" 메시지가 올라오는 걸 확인할 수 있어요!
10. 정리
✅ 요약해서 전체 순서:
1 | STM32F407VG-DISC1 보드 준비 |
2 | CN1 USB 포트 사용 |
3 | CubeIDE 프로젝트 생성 |
4 | USB_OTG_FS를 Device_Only로 설정 |
5 | Middleware → USB Device (CDC) 추가 |
6 | Clock 설정 확인 (USB 48MHz) |
7 | 코드 생성 후 CDC_Transmit_FS() 사용 |
8 | PC에 USB 연결 → Tera Term으로 통신 확인 |
자, 성공 했나?
다음 포스팅은 tera term에서 입력을 받아서 다시 출력하는 echo 기능을 설명할께요.
'Embedded Program' 카테고리의 다른 글
VCP (Virtual COM Port) 구현(STM32F407x) 회로도#1 (0) | 2025.04.26 |
---|---|
VCP (Virtual COM Port) RX 구현(STM32F407x) (1) | 2025.04.25 |
FIFO vs LIFO (0) | 2025.02.09 |
실시간 운영체제(RTOS) vs 베어메탈 – 언제 RTOS를 써야 할까? (0) | 2025.02.08 |
펌웨어 디버깅 기법 – JTAG, SWD, 시리얼 로그 활용법 (0) | 2025.02.07 |