[NUCLEO-F103RB] 누클레오 개발보드에서 USB 사용하기 (USB CDC VCP 테스트)

Cover Image

최근 들어 STM32 MCU의 DFU 기능을 사용해 보려하고있습니다.

지금 당장 가지고 있는 STM32 개발보드 중 가장 만만한 게 STM32F103이니 이걸로 테스트해 보려 했는데요, 문제가 하나 있다면 MCU의 D+, D-와 연결된 USB 포트가 없다는 것이었습니다.

따라서 DFU고 뭐고 간에 우선 누클레오보드에 USB 포트부터 만들어 주어야 했습니다. USB 포트를 만들고 간단히 CDC VCP로 테스트하면 되겠네요.

CubeMX 세팅 #

💡 여기에서는 STM32CubeMX와 Visual Studio Code + STM32 VS Code Extension 조합으로 개발환경을 설정하였습니다. 이와 관련해서는 아래 내용을 참고해 보세요.

VSCode에서 디버깅 가능한 STM32 개발환경 만들기

NUCLEO-F103RB 개발보드로 프리셋을 설정한 후 USB Device를 Enable,

USB DEVICE 설정을 CDC로 선택하였습니다.

펌웨어 작성 #

1초 간격으로 “test” 문자열을 출력하도록 해보았습니다.

USER CODE BEGIN Includes #

USER CODE BEGIN 2 #

USER CODE BEGIN WHILE #

배선 준비 #

💡 아래 준비물이 필요합니다.

  • USB 브레이크아웃 보드
  • 1.5 k 저항 x1 (없다면 1 k 3개)
  • 5.1 k 저항 x2 (USB Type-C인 경우, 없다면 10 k 4개)
  • 브레드보드, 점퍼 케이블

다음으로 배선입니다.

앞서 언급했듯이 NUCLEO-F103RB 개발보드에는 USB 포트가 존재하지 않습니다. 그렇다면 헤더 핀 단자에 USB를 꽂아 직접 만들어주면 되는데요, 아래 두 가지 주의해야 할 부분이 있습니다.

일부 MCU: DP Pull-up #

Schematic of Nucleo-64

Nucleo-64의 Schematic을 참고해 보면 USB의 두 디퍼런셜에 해당하는 PA11과 PA12에 아무런 핀이 연결되어 있지 않은 것을 확인할 수 있습니다.

이때 USB 2.0 스펙에서는 FS(full-speed)로 동작하기 위해 DP를 1.5k 저항으로 Pull-up 해야 하는데요, 제가 사용하는 NUCLEO-F103RB에는 MCU 내장 USB Pull-up 저항이 없기 때문에 추가적인 배선이 필요합니다.

AN4879 중 3.1.1

AN4879에서는 1.5 k 저항을 이용해 GPIO와 연결하라고 하네요. USB 스펙에 따라 USB의 연결 여부를 감지한 후에 DP 라인을 Pull-up하도록 하는 것 같습니다.

어차피 여기에서는 테스트 목적으로 회로를 구성하기 때문에 개발보드의 3.3 V 출력에 저항을 직결해도 큰 문제가 없어보입니다.

USB Type-C: CC1, CC2 Pull-down #

다음으로 USB Type-C 한정 추가적인 배선이 또 필요합니다.

AN5225 중 10.1

USB 장치의 모드를 인식하는 단자인 CC1과 CC2를 USB 2.0 규격에 맞게 Pull-down해주어야 합니다. 만약 그러지 않으면 PC에서 VCP가 인식되지 않습니다.

배선 #

가지고 있는 막대 저항이 기본적인것들뿐이라 1 k 저항을 직, 병렬하여 DP Pull-up을 위한 1.5 k 저항을 구성하였고, 10 k 저항을 각각 병렬로 구성해 CC1, CC2의 Pull-down 해주었습니다.

이렇게 해도 잘 인식되네요.

테스트 #

IMG_0037.mov

VCP가 잘 인식되고 동작 역시 문제 없는것을 확인할 수 있었습니다.

브레드보드에 대충 연결해두어 안정적일지는 알 수 없지만.. 테스트하는 당분간 통신 오류 해결은 PC 몫으로 미뤄보겠습니다 😉