[USB通信] PCと評価ボードとをVirtual PortによりUSBで通信する

はじめに

PCとボードとをRS232CではなくUSBで通信しようと思い、今回何とかやってみました。

世界的な半導体不足とのことで、それが原因かわかりませんが、STマイクロエレクトロニクスの評価ボードを買おうとしたところ、ほとんど在庫なしというこれまで経験したことのない状況でした。

これまで評価ボードは必要なときにRSやDigikeyで何の苦も無く買えていたので、今回は在庫がある評価ボードを探すのに一苦労しましたが、何とかST MicroelectronicsのNUCLEO-L496ZGを購入することができたので、これを使用します。



動作環境

  • NUCLEO-L496ZG(STマイクロエレクトロニクス)
  • STM32CubeIDE Version 1.12.0
  • Windows10

NUCLEO-L496ZG評価ボード



STM32CubeIDEを起動

STM32CubeIDEを起動して、File - New - STM32 Projectをクリック。

Board Selectorをクリック。

Command Part Numberの欄でNUCLEO-L496ZGを選択しNextをクリック。

Project NameをNUCLEO-L496ZG_test01として(もちろん何でもいいです)Finishをクリック。

Yesをクリック。

下のようなウィンドウが表示されます。

Clock Configurationを開くとUSBのクロック周波数は48MHzに設定されています。

Middleware - USB_DEVICEを選択し、Class For FS IPにCommunication Device Mode(Virtual Port Com)を設定します。

PA11, PA12がボード上のUSBコネクタ(CN14)に接続されていますので、ここが使われることになります。

Ctrl-Sを押すとコードを生成するか聞かれるのでYesをクリック。

Yesをクリック。

するとコードが自動生成されます。

USB_DEVICE/App/usbd_cdc_if.hを開いて以下のように追加します。

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------*/
char cmd = 0; <- 追加
/* USER CODE END PV */
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);
  CDC_Transmit_FS( &Buf[0], *Len); <- 追加
  cmd = Buf[0]; <- 追加
  return (USBD_OK);
  /* USER CODE END 6 */
}

続いてUSB_DEVICE/App/usbd_cdc.hを開いて以下のように追加します。

/* USER CODE BEGIN INCLUDE */
 extern char cmd; <- 追加
/* USER CODE END INCLUDE */

そしてmain.cを開いて以下のように追加します。

  while (1)
  {
    /* USER CODE END WHILE */
	  if (cmd == '1'){
		  printf("Start\n\r");
		  sprintf(cdcBuffer, "Count value = %d\n\r", count++);
		  CDC_Transmit_FS((uint8_t*)cdcBuffer, strlen(cdcBuffer));
		  HAL_Delay(1000);
	  }
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

PCからキー入力された文字がターミナルにエコーバックされます。文字が1のとき、表示回数がターミナルに表示され、1以外の文字が入力されると表示回数の表示が停止します。

buildをしてST-LINK経由で書き込みます。その後Tera Termで接続し、キーを入力してみます。

とりあえず、基本的な動作を確認することができました。どこかの場面で使えそうな気がします。

© 2025 サニーサイド