STM32/STM32_USBtoUART

STM32로 USB to UART 모듈 만들기 6편(보드테스트,LED추가)

원원 2025. 7. 4. 20:38

안녕하세요.
오늘은 5편에서 만들었던 보드가와서 테스트를 해보겠습니다.

(TX/RX LED 수정)
테스트전에 우선 RX, TX할때 LED를 10ms 점멸하게 추가하겠습니다.
RX,TX를 처리하는 함수로 진입하면 현재시간을 저장하고 LED를키고 flag를 ON합니다.  그리고 main문에서 해당 flag가 ON이면 LED가 켜져있는 시간을 확인해서 10ms가됐을때 LED를 OFF시킵니다.
아래 코드를보면 RX를 처리하는 함수에서 들어온 데이터의  rx_data가 0x01~0x7f 범위일때만 led를 점멸시킵니다. 해당 조건을 넣은 이유는 rx핀을 손으로 만지면 노이즈로인해서 RX함수가 호출이 되어서 아스키코드값이 들어왔을때만 led가 점멸시키게 했습니다.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART3)
  {
    CDC_Transmit_FS(&rx_data, 1);
    HAL_UART_Receive_IT(&huart3, &rx_data, 1);


    if (rx_data >= 0x01 && rx_data <= 0x7F)
    {
        HAL_GPIO_WritePin(LED_RX_GPIO_Port, LED_RX_Pin, GPIO_PIN_SET);
        led_rx_flag = 1;
        led_rx_on_tick = HAL_GetTick();
    }
  }
}

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  HAL_UART_Transmit(&huart3, Buf, (uint16_t)(*Len), 100);

  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  HAL_GPIO_WritePin(LED_TX_GPIO_Port, LED_TX_Pin, GPIO_PIN_SET);
  led_tx_flag = 1;
  led_tx_on_tick = HAL_GetTick();

  return (USBD_OK);
  /* USER CODE END 6 */
}

  while (1)
  {
    // RX LED
    if (led_rx_flag && (HAL_GetTick() - led_rx_on_tick >= 10))
    {
        HAL_GPIO_WritePin(LED_RX_GPIO_Port, LED_RX_Pin, GPIO_PIN_RESET);
        led_rx_flag = 0;
    }

    // TX LED
    if (led_tx_flag && (HAL_GetTick() - led_tx_on_tick >= 10))
    {
        HAL_GPIO_WritePin(LED_TX_GPIO_Port, LED_TX_Pin, GPIO_PIN_RESET);
        led_tx_flag = 0;
    }

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }


(클럭 설정 수정)
이전에는 테스트를 nucleo보드로 했었고 외부클럭을 ST-LINK를 통해서 받았습니다.근데 이 보드는 외부크리스탈로 받으므로 HSE 설정을 수정해줘야합니다. (BYPASS Clock Source -> Crystal/Ceramic Resonator)





이제 아래의 보드를 테스트해보겠습니다. 


테스트항목1) LED관련
전원을 연결하면 LED_POWER LED가 들어오고, 터미널프로그램을 연결하면 STATE LED가 들어옵니다.
TX/RX시 LED가 점멸합니다.



테스트항목2) 통신관련
다른 USB to UART 지그랑 115200bps로 연결시 통신합니다.



9600bps로 재연결시 통신 합니다.


소스코드(Commits: TX/RX LED update) 
https://github.com/yhunterr/STM32_USBtoUART