STM32CubeMX ソフトウェアを使用して USB_DEVICE_Virtual Port Com (仮想シリアル ポート) を生成します。

1. テストプラットフォーム:
MCU: STM32F429NIH6
ツール: STM32CubeMX ソフトウェア
コンパイルソフトウェア: MDK

2. 設定手順
(1). STM32CubeMX ソフトウェアを開き、新しいプロジェクト ファイルを作成し、シリアル ポートで受信したデータを送信する必要があるシリアル ポート送受信ルーチンを作成します。ここでは詳しく紹介できませんが。
(2). USB_OTG_FS の設定 基板上の USB ピンは PA11 と PA12 に接続されているので、ここで USB_OTG_FS を設定し、Mode 項目で Device Only を設定し、同時に割り込みを有効にします。
ここに画像の説明を挿入
(3). USB_DEVICE を設定し、Class For FS IP 項目で Communication Device Class (Virtual Port Com) を選択します。
ここに画像の説明を挿入

(4). .usbd_cdc_if.c ファイル内の CDC_Receive_FS 関数を書き換えます。この関数は、仮想シリアル ポート トランシーバー機能をテストするために受信データを返すことです。

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
    
    
  /* USER CODE BEGIN 6 */
	unsigned short dwCnt=0;
	
	for(dwCnt=0;dwCnt<*Len;dwCnt++)
	{
    
    
		UsbTxdData[dwCnt]=Buf[dwCnt];
	}
	CDC_Transmit_FS(UsbTxdData,*Len);
	
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

ここに画像の説明を挿入
(5). USB 印刷機能の追加 usbd_cdc_if.c の先頭はヘッダーファイル「#include "stdarg.h"」(単一展開ダッシュに変更)を参照し、最後に以下の関数を追加して実現します。仮想シリアルポート印刷機能。

void usb_printf(const char *format, ...)
{
    
    
    va_list args;
    uint32_t length;
 
    va_start(args, format);
    length = vsnprintf((char *)UserTxBufferFS, APP_TX_DATA_SIZE, (char *)format, args);
    va_end(args);
    CDC_Transmit_FS(UserTxBufferFS, length);
}

usb_printf("Test int: i = %d\r\n", dwData);
usb_printf("Test float: i = %f", 1.234);

ここに画像の説明を挿入
(6).USB ドライバファイルの説明
usb_device.c には、プログラムの先頭で呼び出される USB デバイス関数の初期化関数 MX_USB_DEVICE_Init() が 1 つだけ含まれています。
usbd_cdc_if.c は、USB の CDC クラス アプリケーション層ファイルで、仮想シリアル ポートの受信、送信、および制御機能が含まれています。
usb_desc.c には、USB ディスクリプタと、USB エニュメレーション処理などの関数が含まれます。
usb_conf.com は、USB ピンの初期化とパラメータ設定、割り込みコールバック関数などを含む USB ピン設定ファイルです。

おすすめ

転載: blog.csdn.net/qizhi321123/article/details/127277800