STM32/STM32_USBtoUART

STM32로 USB to UART 모듈 만들기 4편(FW-라인스테이트)

원원 2025. 6. 17. 22:40

안녕하세요. 오늘은 Terminal 프로그램을 연결/미연결했을때 구분하는법을 알아보겠습니다.

사용하는 Terminal 프로그램은 Teraterm입니다.
연결 시 , 미연결 시 아래와 같이 커맨드가 옵니다.
차이점을보면 세번째 바이트가 연결 시 0x03, 미연결 시 0x02입니다.

두번째 바이트의 0x22는 LINE STATE를 의미합니다.

세번째 바이트의 0번째비트는 DTR, 1번째 비트는 RTS를 의미합니다.
이 중에서 DTR이 연결/미연결을 알 수 있는 비트입니다.

STM32에서 이 신호는 3편 라인코딩때와 마찬가지로 CDC_Control_FS함수에서 구분이 가능합니다.
이때 pubf는 USBD_SetupReqTypedef의 주소를 가지고있어서 req->wValue를 하면 세번째 바이트를 얻을 수 있습니다.

    case CDC_SET_CONTROL_LINE_STATE:
      USBD_SetupReqTypedef *req = (USBD_SetupReqTypedef *)pbuf;
      uint16_t wValue = req->wValue;

      char dtr = wValue & 0x01; // Bit 0: DTR

      // DTR LED (PA10)
      if (dtr)
      {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET); // LED ON
      }
      else
      {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_RESET);   // LED OFF
      }
    break;

이렇게되면 teraterm을 연결/연결해제 할때마다 LED로 구분이 가능하게 됩니다.

소스코드(Commits: Line state update)
https://github.com/yhunterr/STM32_USBtoUART

다음 시간에는 pcb를 제작하여보겠습니다.