Help us understand the problem. What is going on with this article?

mbedを使ってSTM32-NUCLEOのUSBを動かす

More than 3 years have passed since last update.

最近(2017年)になって、STが開発したmbed向けSTM32 USBライブラリが公開されていたので試してみました。

STM32-NUCLEOで USB ライブラリ USBDEVICEUSBHOST の動作が確認できました。

秋月電子で購入できる部品を使いました。

20170716_123033571_iOS.jpg
20170716_110702234_iOS.jpg

USB Device

STM32をUSB Deviceとして使います。

Hardware

STM32-NUCLEO と マイクロBメスUSBコネクタを接続します。

STM32-NUCLEO USB
PA11 (CN10-14) D-
PA12 (CN10-12) D+
GND (CN10-20) GND

VBUSの電源はNUCLEOのST-LINK側のUSBから供給しているので未接続です。

ST-LINK側のUSBを繋いでいない場合は、「U5V (CN10-8) 」と「 VBUS 」を繋げてください。

NUCLEO_F103RBを使う場合はD+を1.5kohmでプルアップしくださいとの記載が、ソースコードにコメントしてありました。

Software

Nucleo_usbmouseをコンパイルして書き込む。

Nucleo_usbhostはUSBメモリとマウスとキーボードが動作します。起動時に刺してあるデバイスに応じて動作します。

このデモはUSB HID マウスを使ってカーソルを円を描くように移動させます。

使用したソフトのリビジョンです。

Name hash
ST/Nucleo_usbmouse b6e9ca6a0bf6
ST/USBDEVICE 50ec00aa4515
mbed 22da6e220af6 (Relase146)

FLASH:38.8KB RAM:3.6KB

Result

PCに挿すとマウスとして認識されてカーソルがクルクル回りました。

シリアルポート出力結果

cos: 5000.000000, sin: 0.000000
cos: 4993.154618, sin: 705.600040
cos: 4972.637216, sin: -1397.077491
cos: 4938.503974, sin: 2060.592426
cos: 4890.848353, sin: -2682.864590
cos: 4829.800843, sin: 3251.439201
cos: 4755.528600, sin: -3754.936234
cos: 4668.234993, sin: 4183.278193
cos: 4568.159046, sin: -4527.891810
cos: 4455.574781, sin: 4781.879642
cos: 4330.790472, sin: -4940.158120
cos: 4194.147797, sin: 4999.559301
cos: 4046.020905, sin: -4958.894267

USB Host

STM32をUSB Hostとして使います。

Hardware

STM32-NUCLEO と AメスUSBコネクタを接続します。

STM32-NUCLEO USB
U5V (CN10-8) VBUS
PA11 (CN10-14) D-
PA12 (CN10-12) D+
GND (CN10-20) GND

Software

Nucleo_usbhostをコンパイルして書き込む。

Nucleo_usbhostはUSBメモリとマウスとキーボードが動作します。USBコネクタに挿したデバイスに応じて動作します。

Nucleo_usbhostはThreadを使っているので、mbed os 5を使ってます。

使用したソフトのリビジョンです。

Name hash
ST/Nucleo_usbhost 2ca820a42fd5
ST/USBHOST d3ac9e1c0035
mbed-os 42be5c0 (mbed-os-5.4.3)

FLASH:67.5KB RAM:12.3KB

Result

起動後に抜き差しして、別デバイスをさしても動作していました。

マウスを挿して、ボタンを押したり、動かすとシリアルに出力されます。

 [USB_INFO: /src/USBHOST/USBHost/USBHost.cpp:169]New device connected: 2000680c [hub: 0 - port: 1]
 [USB_INFO: /src/USBHOST/USBHostHID/USBHostMouse.cpp:72]New Mouse device: VID:046d PID:c06c [dev: 2000680c - intf: 0]
 buttons: 0, x: 1, y: -1, z: 0
 buttons: 0, x: 50, y: -39, z: 0
 buttons: 0, x: 82, y: -38, z: 0
 buttons: 0, x: 23, y: -31, z: 0
 buttons: 0, x: 7, y: -64, z: 0
 buttons: 0, x: 15, y: -52, z: 0
 buttons: 0, x: 8, y: -21, z: 0
 buttons: 1, x: 0, y: 0, z: 0
 ..
 [USB_INFO: /src/USBHOST/USBHost/USBHost.cpp:491]Device disconnected [2000680c - Mouse - hub: 0 - port: 1]
 mouse seen disconnected

キーボードを挿して、キーを押すとシリアルに出力されます。

 [USB_INFO: /src/USBHOST/USBHost/USBHost.cpp:169]New device connected: 2000680c [hub: 0 - port: 1]
 [USB_INFO: /src/USBHOST/USBHostHID/USBHostKeyboard.cpp:127]New Keyboard device: VID:413c PID:2107 [dev: 2000680c - intf: 0]
 Key: j
 Key: j
 Key: a
 Key: b
 Key: c
 Key: d
 Key: e
 Key: f
 Key: g

USBメモリを挿すと下記が表示されましたが、途中でエラーになって止まりました。Capacityの値が異常でした。

 USB_INFO: /src/USBHOST/USBHost/USBHost.cpp:169]New device connected: 2000680c [hub: 0 - port: 1]
 [USB_INFO: /src/USBHOST/USBHostMSD/USBHostMSD.cpp:88]New MSD device: VID:13fe PID:1f23 [dev: 2000680c - intf: 0]
 file system mounted
                    [USB_INFO: /src/USBHOST/USBHostMSD/USBHostMSD.cpp:175]MSD [dev: 2000680c] - Vendor ID: silicon
 [USB_INFO: /src/USBHOST/USBHostMSD/USBHostMSD.cpp:179]MSD [dev: 2000680c] - Product ID: -power
 [USB_INFO: /src/USBHOST/USBHostMSD/USBHostMSD.cpp:183]MSD [dev: 2000680c] - Product rev: 0.00
 [USB_INFO: /src/USBHOST/USBHostMSD/USBHostMSD.cpp:148]MSD [dev: 2000680c] - blockCount: 7827455, blockSize: 512, Capacity: -287310336

感想、その他

  • 本当にUSBが動くのか半信半疑でしたが、すんなりと動きました。
  • 最初はOkamotoさんが作ったF401RE-USBHostを使おうと思って調べてる途中で、今回のST製のライブラリの存在を知りました。mbedのライブラリの情報を探すのは難しいですね。
  • STM32のOTG-FSコントローラを使う場合はマイコンの端子とD+とD-とGNDを繋げば動くことが分かった。(D+のプルアップはマイコンに内蔵されている。)
  • USBのライブラリがmbed-osのソースツリーのfeatures/unsupportedにある意図が良く分からない。mbed os 5としては現状は非サポートという意味のような気がします。Renesas AZ1用のUSBライブラリもRenesasがPublishしている。待っていればそのうちmbed os でサポートされるようになるでしょう。
  • このUSBライブラリは内部的にはSTM32Cubeを使っており。今のところはSTの人がSTM32Cubeのバージョンアップ作業をやってくれている。
eggman
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away