Project_OKI’s diary

エンジニアの勉強ブログ

STM32マイコン36(USBのCDC使用ついて)

STM32マイコン36(USBのCDC使用)

1.本日の内容

 (1) STM32のUSB機能の一つである、CDC機能を使用する方法について記載する。

 (2) CDCにより、mbedをUSBで接続し、Vertual Com Port(仮想COM)として認識ようにする。

 

  使用マイコン

 

・目次

 

2.内容

(1) CDCとは

 ・CDC (Communication Device Class) は、USBデバイスのクラスの1つであり、データ通信を行うデバイスを定義するための規格。

 ・PCと通信デバイスとの間で、双方向データ転送を可能にするために使用される。

 ・デバイスとホストコンピュータ間でデータの送受信を簡単に行うことができる。

 ・モデム、シリアル通信ポート、仮想COMポートなどがCDCを使用して実装される。

 

 ・CDCを使用することで、デバイスがドライバソフトウェアなしで標準的なコンピュータと通信できる。

 ・これにより、追加のドライバインストールなしでデバイスを接続し、通信できる。

 

(2) CubeIDEの設定

 (a) USB_OTG_FSのModeをDevice_Onlyに変更する。

 

 (b) USB_DEVICEタブのClass For FS IPをCommunication Device Class(VPC)に変更する。

 (c) RCCタブのHigh Speed Clock をCrystal/Ceramic Resonatorに変更する。

  →RCCの設定(外部発振子の使用方法)について:nucleof401RE(外部発振子で使用する) - Project_OKI’s diary

 (d) Clock Configurationに移動すると、

  自動的にClockを設定するか確認されるので、Yesを選択する。

 (e) クロックが自動的に設定される。(今回は、そのまま)

  ※Input frequencyが今回は、8MHzの振動子を使用する為、8のまま。

   別の周波数の振動子を使用する場合は、その振動子の周波数に合わせて、

   数値を変更する。

  ※USBのクロックが48MHzになっていることを確認する。

   →下記の場合は、Main PLLの /3の先が48MHzになっていることを確認。

 

 (f) 歯車マークを押し、プログラムの生成を行う。

 

・mbedのピン配置は、下記サイトを確認。

 →NUCLEO-F401RE | Mbed

 

(3) 回路の確認
 今回は、下記USBコネクタDIP化キットを使用する。

 
USBコネクタ側ピン番号 mbed側ピン番号 機能
1 5V VBAS
2 PA_11 D-
3 PA_12 D+
4 none NC
5 GND GND
※D+側は、10kΩ抵抗で、3.3V又は5Vでプルアップする。
 

 
(4) USBの接続確認
 USBの接続が出来ている場合、デバイスマネージャーを確認すると、
 下記のように、仮想COMポートが確認できる。

※ここにUSBシリアルデバイスが表示しない場合、USBの認識が出来ていないということ。

※ここに不明なUSBデバイスが接続と出る場合、USBの認識はしているが、CDCの設定などができていないか。

通信速度が間違っていて、通信が途中でコケているなどがかんがえられる。

 

 また、テラタームを起動すると、下記のように、COMの選択ができるようになる。
 (今回は、プログラムを何も記載していないので、COMが開くだけ)

 
(5) プログラムの作成
受け取った文字をそのまま送信するプログラム
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);

  /// USB送信
  CDC_Transmit_FS(&Buf[0], 1);// 受け取ったBuf[0]をそのまま送信する。

  return (USBD_OK);
  /* USER CODE END 6 */
}
 ・usbd_cdc_if.cファイルは、CubeIDEによって自動生成されるファイル
 ・CDC_Receive_FS関数:USB受信時、自動的に呼び出される。 
 ・CDC_Transmit_FS関数:USB送信関数

 
動作結果
 

 

3.関連記事

関連記事一覧:
 
組み込みC言語
 
STM32のデータシートなど: