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 ピン設定ファイルです。