はじめに
電気CADの多くは機能が盛りだくさんで、主要な機能こそボタンとして並んでいるものの、ちょっとでも込み入った操作になると途端にメニュー階層の奥深くを彷徨う事になります。 これでは仕事になりません。
いままでは外付けテンキー+キーカスタマイズソフトを使っていましたが、ソフトがOSの更新に追従しなくなり、使えなくなってしまいました。
そこで、この際自分好みのカスタムキーを作ろうと思いUSB-HIDキーボードを作り始めたのでその記録です。
部品調達
aitendo店頭で購入しました。 amazonでも扱いがあるようです。
石はSTM32F103C8です。 72MHzで回るCortex-M3がボードになってUSD2前後から手に入ります。
ソフト関係
STM32CubeMX ピン配置とペリフェラル、クロックなどの設定をすると各種開発環境用のプロジェクトファイルを吐き出してくれる便利なツールです。
IDEの指定は、Project Settings – Tookchain / IDE から”TrueSTUDIO”を選びました。
諸々の設定が終わったところで、Project – Generate Code すれば、指定した環境用のプロジェクトが出来上がります。
TrueSTUDIO 開発環境です。デバッガとの連携も出来ます。
使う時に更新をチェックして常に最新に保った方が良さそうです。 今回もCubeMXから出てきたprojectがHALライブラリのリンクに失敗する問題でビルド出来ませんでしたが、最新版に更新することで回避出来ました。
設定
CubeMXでプロジェクトを作ります。 デバイスはSTM32F103C8を指定します。
外付けクリスタル用にRCCのHSE/LSEを設定します。
USBは、Device(FS)を有効にする事と、MiddleWares(左ペイン上側)の”USB_DEVICE”から、”Human Interface Device Class (HID)”を選びます。
クロックはPLLの逓倍数(PLLMul)をx9にして、USB Prescalerを/1.5にするだけでした。
今はひとまずこのくらいです。
本題
前フリが長くなりましたがやっとコード書きです。
STM32F103C8 HID keyboard とかでググって記事を探します。
ひとまず文字を出したかったのでベタ書きですが、ShiftやAltなど付加キーと、押下するキーコード、ディレイタイムを考慮出来るようにしてみています。
https://github.com/crono2250/stm32_USB_HID_CustomKey/
あー、複数キー押しっぱで何かする みたいなの考慮出来てなかったな、何か方法考えなくちゃ。
ということで、1秒おきにエディタに”Hoge”と書かれました。ぱちぱち。
PCに接続されるキーボードが1つならこれで問題ないんですが、予めCapsLockがされていたり、Shiftを別のキーボードで押されていたりすると、小文字が出ません。 対応面倒くさそうなので後回し。
あと、キーバインド固定の1打鍵1キャラしか出てこないキーボードを作るなら買ってきますよね。 指定のキーにキー、待ち時間、同時押し、諸々を考慮したシーケンスの登録が必要になります。 ただそれってキーボード相手にどうデータを送るんじゃ。 どうもNumLockやCapsLock、ScrollLockのLED用情報を使ってデータ転送する方法があるようです。要調査&実験。
Comments