STM32-USB虛擬串口

一.說明

使用CubeMX 5.0.1Keil 5.26配合開發,HAL庫,開發板是STM32F103C8T6最小系統
開發板實物

二.CubeMX配置

新建工程這些基礎配置就不仔細介紹了,直接進入正題。

  1. USB_DEVICE設置爲虛擬串口,其他功能可以不配置;
    在這裏插入圖片描述

  2. 開啓USB設備,下面的參數可以不用配置(GPIO上拉已經由電路配置好了,這裏軟件無法配置)。
    在這裏插入圖片描述

  3. USB時鐘配置爲48MHz在這裏插入圖片描述

三. Keil配置

  1. 由CubeMX生成好工程後,基本不需要改動。如果外部調用USB發送數據,只要引用usbd_cdc_if.h文件,調用**uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)**函數即可,返回的參數有以下三種,可以暫時不管。
 typedef enum {
  USBD_OK   = 0,
  USBD_BUSY,
  USBD_FAIL,
}USBD_StatusTypeDef;
  1. usbd_cdc_if文件中的**static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)**即USB通訊中斷調用函數。這裏和串口的方式不同,串口每次中斷都是讀一個uint8_t,USB是讀取一段數據。
    Buf就是讀取來的數據,*Len代表其長度。通過分析Buf數據,執行對應指令,這裏只是把Buf原樣發送回去。後面代碼就是重新向Buf讀入數據。
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
	if (Buf[*Len-2] == 0x0D && Buf[*Len-1] == 0x0A){
		CDC_Transmit_FS(Buf, *Len);
	}
	USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
	USBD_CDC_ReceivePacket(&hUsbDeviceFS);	
  return (USBD_OK);
  /* USER CODE END 6 */
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章