STM32F746G-DISCO보드를 사용하여 USB Device mode에서 CDC(Communication Device Class) 테스트를 해 보았습니다. 윈도우 PC와 STM32F746G-DISCO보드를 USB로 연결 후 가상의 COM 포트(Virtual COM Port)를 이용하여 USB-to-RS232 브릿지로 동작시키는 것을 말합니다. 간단히 pc에서 uart를 사용하기 위해 사용하는 usb-to-serial로 이해하시면 쉽게 이해가 가실 겁니다.
STM32F746G-DISCO의 예제에는 CDC_Standalone이 없어서 STM32756G_EVAL의 CDC_Standalone 예제를 참고하여 테스트되었습니다. (예제 위치 : STM32Cube_FW_F7_V1.16.1/Projects/STM32756G_EVAL/Applications/USB_Device/CDC_Standalone)
STM32CubeIDE에서 새 프로젝트를 생성합니다.
초기화 후 RCC/SYS/USART1/USB_DEVICE/USB_OTG_FS만 설정하였습니다.
USB_OTG_FS는 Device모드로 설정하였고 Class를 CDC(Virtual Port Com)으로 설정하였습니다.
제공되는 예제에서 주의 깊게 봐야 하는 파일은 usbd_cdc_interface.c입니다.
이 파일이 실제 PC와 보드 사이의 인터페이스 역할을 해 주는 부분입니다.
다른 함수는 그대로 사용되었으며 간단한 송/수신 loopback 테스트를 위해 CDC_Receive_FS와 CDC_Trasmit_FS 함수만 아래와 같이 변경하였습니다.
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 6 */
uint8_t result = USBD_OK;
if (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) {
return USBD_FAIL;
}
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
CDC_Transmit_FS(Buf, *Len);
return result;
/* USER CODE END 6 */
}
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
uint8_t result = USBD_OK;
/* USER CODE BEGIN 7 */
uint16_t i;
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
if(!hcdc)
return USBD_FAIL;
if (hcdc->TxState != 0)
return USBD_BUSY;
for (i=0; i < sizeof(UserTxBufferFS); i++) {
UserTxBufferFS[i] = 0;
}
for (i=0; i < Len; i++) {
UserTxBufferFS[i] = Buf[i];
}
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, Len);
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
/* USER CODE END 7 */
return result;
}
실행하기 전에 윈도우 PC에서 Virtual COM Port를 사용하기 위해서는 ST에서 제공되는 driver를 먼저 설치해야 합니다. 아래 사이트에서 다운로드 받습니다.
다운로드 받은 en.stsw-stm32102.zip의 압축을 해제 해 보니 제가 받은 버전은 VCP_1.5.0 입니다.
설치가 완료되었으면 코드를 빌드 후 다운로드합니다.
Micro USB 케이블을 CN13(USB_FS) 단자에 꽂으면 윈도우 PC상에 가상 COM 포트가 새로 생성됩니다.
(CubeIDE에서 다운로드에 사용되는 COM4 외에 Virtual COM Port로 COM6이 생성되었습니다.)
UART 프로그램으로 테스트를 해 봅니다. COM6 포트 송/수신이 정상적으로 동작됩니다.
'Hardware > STM32' 카테고리의 다른 글
[STM32F746G-DISCO] Flash 사용하기 (0) | 2024.07.17 |
---|---|
[STM32F746G-DISCO] USB Audio 사용하기 (Device Mode) (0) | 2024.07.17 |
[STM32F746G-DISCO] USB MSC로 사용하기 (Device Mode) (0) | 2024.07.16 |
[STM32F746G-DISCO] USB 키보드로 사용하기 (Device Mode) (0) | 2024.07.15 |
[STM32F746G-DISCO] USB 마우스로 사용하기 (Device Mode) (1) | 2024.07.15 |
댓글