본문 바로가기

공부/STM32F1

28.[stm32f103][hal] CDC-Virtual Port Com

728x90
반응형

0. driver

VCP_V1.3.1_Setup_x64.exe
다운로드

 

 

1. STM32 Cube

 

 

 

2. 소스

usbd_cdc_if.c

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; // last Add Null

  USBD_CDC_ReceivePacket(&hUsbDeviceFS);

  return (USBD_OK);

  /* USER CODE END 6 */

}

 

main.c

 #include "main.h"
#include "stm32f1xx_hal.h"
#include "usb_device.h"


/* USER CODE BEGIN Includes */
#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 Includes */


/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;


UART_HandleTypeDef huart3;


.
.
.


int main(void)
{


  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  MX_USART3_UART_Init();
  MX_I2C1_Init();
  /* USER CODE BEGIN 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {


  /* USER CODE END WHILE */
    uint16_t len = strlen((const char*)UserRxBufferFS);
    
    if(len > 0)
    {
      strncpy((char *)UserTxBufferFS, (const char*)UserRxBufferFS, len);    
      strcat((char *)UserTxBufferFS, "_IN\r\n");      
      CDC_Transmit_FS((uint8_t*)UserTxBufferFS, strlen((const char*)UserTxBufferFS));      
      memset(UserRxBufferFS, 0, sizeof(UserRxBufferFS));
      memset(UserTxBufferFS, 0, sizeof(UserTxBufferFS));
    }
    
    HAL_Delay(500);
  /* USER CODE BEGIN 3 */


  }
  /* USER CODE END 3 */


}

 

 

 

3. 결과

 

4. CDC printf 적용하기

https://hnydiy.tistory.com/146

 

34.[stm32f103][hal] CDC Printf 적용하기

https://hnydiy.tistory.com/76 28.[stm32f103][hal] CDC-Virtual Port Com 0. driver 1. STM32 Cube 2. 소스 usbd_cdc_if.c static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6..

hnydiy.tistory.com

 

728x90
반응형