본문 바로가기
Programming/Embedded

[STM32F103C8] USB Serial 통신(CDC 통신)

by No Brainer 2022. 2. 19.

보드에 내장된 USB포트를 이용한 시리얼 통신 예제

USB-Serial 변환기 없이 보드와 컴퓨터를 연결하여 값을 주고받을수 있습니다.

<CUBEMX>



 

RCC-HSE, LSE- Crystal

SYS-Serial wire

USB-DEVICE

USB_DEVICE-COMMUNICATION DEVICE CLASS(VIRTUAL PORT)

GPIO-PC13

 

 

<True studio>

1. usbd_cdc_if.c  파일 

>문자 데이터의 끝을 알리는 null 코드의 역할을 수행

 

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)

{

  /* USER CODE BEGIN 6 */

  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);

  Buf[*Len] = 0;//추가되는 코드

  USBD_CDC_ReceivePacket(&hUsbDeviceFS);

  return (USBD_OK);

  /* USER CODE END 6 */

}

 

 

 

2)main.c 파일

/* USER CODE BEGIN Includes */
#include "usbd_cdc_if.h"  // <=============== 추가

/
* USER CODE END Includes */

=========================

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
#define APP_RX_DATA_SIZE  64
#define APP_TX_DATA_SIZE  64
extern uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];

/* USER CODE END PV */

==========================

    while (1)

  {

    /* USER CODE END WHILE */

 

    /* USER CODE BEGIN 3 */

  /*

   uint16_t len = strlen((const char*)UserRxBufferFS);//받은 문자열의 길이를 반환

 

   if(len > 0)//받은 문자열이 있으면

   {

    strncpy((char *)UserTxBufferFS, (const char*)UserRxBufferFS, len);//받은것의 복사본 생성

 

    CDC_Transmit_FS((uint8_t*)UserTxBufferFS, strlen((const char*)UserTxBufferFS));//송신함

 

    memset(UserRxBufferFS, 0, sizeof(UserRxBufferFS));//rx와 tx버퍼를 0으로 초기화

    memset(UserTxBufferFS, 0, sizeof(UserTxBufferFS));

   }

*/

 

 

 

  CDC_Transmit_FS((uint8_t*)"hello\r\n", strlen((const char*)"hello\r\n"));//송신함

   HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_12); // BlackPill LED 깜박임 입니다.

   HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // BluePill LED 깜박임 입니다.

 

   HAL_Delay(10); // 0.5초 간격으로 깜박입니다.

 

  }

 

 

 

 

수신받은 데이터를 그대로 전송하는 echo동작을 수행합니다.

디버깅을 마친 후 코드를 보드에 올린다음 pc와 연결된 usb를 뽑았다가 다시 끼워야 제대로 작동합니다.

<동작모습>

시리얼통신 프로그램을 통해 확인해보았습니다.



 

 

 

 
 

'Programming > Embedded' 카테고리의 다른 글

[STM32F103C8] Basic PWM  (0) 2022.02.19
[STM32F103C8] Timer /Counter Interrupter  (0) 2022.02.19
[STM32F103C8] Basic GPIO(led blinking)  (0) 2022.02.19
[stm32f103c8] 학습  (0) 2022.02.19
USART 통신 문자열 전송  (0) 2022.02.19