2015年8月15日土曜日
NUCLEO-L152REをUSBデバイスにする
NUCLEO-L152REにmbed USBDevice互換のUSBデバイススタックをHAL_PCDで作ってみました。
https://developer.mbed.org/users/va009039/code/L152RE_USBDevice/
STM32CubeMX
まずは、USBコネクタとの配線ミスを防ぐため、HAL_PCDの動作を知るために
STM32CubeMXでMSCのUSBデバイスやHIDデバイスを作成してパソコンに接続してみる。
ボードとUSBコネクタは次のとおりです。
PA12 --- D+
PA11 --- D-
F401REのようにPA9にVCCを接続する必要はない。
USBクロック設定
mbedのオフライン環境にSTM32CubeMXで作製したコードをそのまま取り込んだところ動かなくなってしまった
。USBの48MHzを作るためにクロック設定をしている。既にmbedのスタートアップが走ってクロック設定をしているので、
再設定するには HAL_RCC_DeInit() を呼んで初期状態に戻してから設定し直さないといけない。
ソフトコネクト
USBのDPをプルアップにしてパソコン(USBホスト)にUSBデバイスを検出させます。
ソフトウェアでプルアップを制御する事によって、任意の時点でUSBデバイスを検出させる事が出来ます。
L152REにはSYSCFG_PMCでUSB_PU 内部プルアップを制御できるのだが、システム設定コントローラはUSBコントローラとは
別のクロック供給なので__SYSCFG_CLK_ENABLE()の追加が必要です。
USBDevice
USBDevice互換にするためにUSBHAL_STM32L1.cppをHAL_PCDを使って実装する。
デバッグのためにDBG()PRINT文を入れると表示のタイムアウトでUSB認識しないところがある。
デバッグ情報をRAM上に残して、後から見れるようにトレースプログラムを追加してデバッグをします。
HAL_PCDからのSETUP,IN,OUTパケットのコールバックを使っているのでUSBAL.hにも若干修正をしています。
ソフトコネクト、割込み番号の違いだけで他のボードにも使えると思います。
F103RBは外部にプルアップ抵抗を付けて動作確認しています。他のボードでは未確認です。
各ボードのUSBの違いは以下のとおりです。
L152RE
ソフトコネクトは可能。STM32CubeMXでHAL_PCDEx_SetConnectionState の実装例はある。
_HAL_SYSCFG_USBPULLUP_ENABLE()、__HAL_SYSCFG_USBPULLUP_DISABLE()で内部プルアップ制御をしている。
割込みベクター番号 USB_LP_IRQn
F103RB F303RE
ソフトコネクトはない。プルアップが必要。
割込みベクター番号 USB_LP_CAN1_RX0_IRQn
F072RB(STM32F0) L053R8(STM32L0x3)
ソフトコネクトは可能だが、STM32CubeMXでHAL_PCDEx_SetConnectionState の実装はない。
USB_BCDR DPPU(bit15) を直接制御する。
割込みベクター番号 USB_IRQn
(2015/8/15)
---
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿