ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

STM32F767NuceloでUSBCDCをやってみる。

前回の日記でCDCやってるということ書いたのでとりあえずやり方メモ

  • STM32F767Nucleo144

を利用してます

CubeMXでの操作

CubeMXを開いてUSB_OTG_FSをデバイスに設定

f:id:gsmcustomeffects:20170603225430p:plain

次にクロック設定
USBペリフェラルに48MHzになるように持っていく
他は適当にやって行く

f:id:gsmcustomeffects:20170603225650p:plain

その次にUSB_DEVICEのライブラリをリンクする。
今回はCommunication Device Classをアサインする。

f:id:gsmcustomeffects:20170603230013p:plain

詳細設定は特にいじらなくてもいいはずなのでそのままジェネレート

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 */
  uint8_t sendbuf[] = "Hello USB CDC\r\n";
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
	  HAL_Delay(500);
	  HAL_Delay(500);
	  CDC_Transmit_FS(sendbuf,sizeof(sendbuf));
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

使い方はいたって単純でバッファ確保してあとはtransmitするだけ
あとはつないでTeratermなりで確認する。

f:id:gsmcustomeffects:20170604013456j:plain

f:id:gsmcustomeffects:20170604013254p:plain

まとめ

USBCDCでCOM通信ができた。
Cubeでのサンプルがなかったので手さぐりになったが何とか動作までもってこれた。
あと多少なりUSBのディスクリプタやエンドポイントについても学べたのでSTのフォーラムに上がっている内容も参考にしつつ今後はDualCDC(2個のCOMポートを作る)をやってみたいと思った。

2017/6/8追記
ここにあったディスクリプタ説明は別記事に移管しました