STM32F103-CubeMX-USB學習--虛擬com口

STM32-CubeMX USB學習

    STM32-CubeMX USB學習
        1. 虛擬com學習
            1.1 開發環境
            1.2 使用STM32CubeMX配置代碼
            1.3 串口自發自收
            1.4 串口定向printf

STM32-CubeMX USB學習
1. 虛擬com學習
1.1 開發環境

    軟件環境:
    STM32CubeMX
    版本:SetupSTM32CubeMX-6.0.1.exe
    Firmware:STM32Cube FM_F1 V1.8.0

keil 5 V5.29—支持並行編譯,可以加速編譯效率(最新的版本就可以)
keil的固件包版本:
Keil.STM32F1xx_DFP.2.0.0.pack
keil相關資料的下載
https://www.cnblogs.com/armfly/p/12564643.html

java版本–有遇到過java版本太新導致出問題的
jre-8u201-windows-x64.exe
以下版本親測有問題,請勿使用
jdk-14.0.2_windows-x64_bin.exe

版本的差異會導致各種報錯,切記覈對相關版本.

路徑中不能出現中文空格,出現會報錯.

版本問題導致的報錯之一
Error: L6218E: Undefined symbol USB_FlushRxFifo (referred from stm32f1xx_hal_pcd.o).

    硬件環境
    Stm32F103c8t6–淘寶上最便宜的開發板
    在這裏插入圖片描述

1.2 使用STM32CubeMX配置代碼

    選擇芯片型號,我這邊是C8t6
    在這裏插入圖片描述

    debug選擇 SW模式
    在這裏插入圖片描述

    配置外部時鐘輸入
    在這裏插入圖片描述

    配置USB device的功能
    在這裏插入圖片描述

    將USB的模式配置成COM口的功能在這裏插入圖片描述

    時鐘樹配置,如果前面沒有配置外部晶振輸入,這邊無法配置成功。正常的話自動會配置成功
    在這裏插入圖片描述

    工程配置,配置成對應keil的版本

在這裏插入圖片描述
框出來的位置有時候因爲尺寸太小會出錯,有人說默認的也可以,反正我改了,如下圖
在這裏插入圖片描述

    第一欄裏面選擇第一個和第二個都一樣的,有問題的話可以換了試一下
    第二欄裏勾選將文件分爲.c和.h

在這裏插入圖片描述

    生成工程文件
    在這裏插入圖片描述

1.3 串口自發自收

    實現串口輸出ABCD,需要更改的部分

//1.添加頭文件
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usb_device.h"
#include "gpio.h"
#include "usbd_cdc_if.h"

    1
    2
    3
    4
    5
    6

更改main函數

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  /* USER CODE BEGIN 2 */
    //2.添加數組
    unsigned char buff[4] = {"abcd"};
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        //3. 在while循環中添加如下代碼
        HAL_Delay(1000);
        CDC_Transmit_FS(buff,sizeof(buff)); //USB 串口發送數據
  }
  /* USER CODE END 3 */
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

串口助手
在這裏插入圖片描述

    讀取輸入的值和上一次是否相同,從而輸出不同的值
    首先需要將main函數恢復成初始的狀態
    更改下面的函數
    CDC_Receive_FS();這個函數在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]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

    1
    2
    3
    4
    5
    6
    7
    8

將代碼改成如下的樣子

uint8_t a=0,a1=1;
unsigned char buff1[4] = {"abcd"};
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{    
    
    a = *Buf;        

    if(a == a1)
                CDC_Transmit_FS(Buf,*Len);//自收自發
    else
    {
            CDC_Transmit_FS(buff1,sizeof(buff1));
            a1 = a;
    }
  /* USER CODE BEGIN 6 */
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);

  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
    //CDC_Transmit_FS(Buf,*Len);//自收自發


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

}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

會對比此次的和上一次的差異,如果一樣則輸出 接收到的值,如果不一樣則輸出abcd

PS:有一個BUG,數字大了後識別會出錯,只能識別發送的第一個數據的差異
在這裏插入圖片描述
1.4 串口定向printf

參考文檔:
文件的配置教程
https://www.jianshu.com/p/579783d28044

1.驅動下載鏈接
https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-stm32102.html
2. 代碼操作
https://blog.csdn.net/u010779035/article/details/104369515

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章