ブートローダーの安価なATTinyマイクロコントローラーとArduino開発環境をねじ込む実験は非常に成功しました。 もちろん、AVRを使用すると、Arduinoがなくても良い仕事をします。 しかし、選択肢がある場合は良いことです。 そして、私はSTM32に偶然出会って、ライブラリーとかさばるポート初期化構造を見つけました。 ARM「ティーポット」の救いはARM mbedプロジェクトでした。 個人的に、彼は私にSTM32を手に入れて作業を開始させました。
しかし、 NucleoボードのLEDの点滅はすぐに退屈しました。 足とベルとホイッスルが多すぎるため、私はそれを脇に置き、Maple Mini(最小限のバインディングでSTM32F103CBT6)を取り上げました。 すべてが非常に簡単でシンプルです-サーボが回転し、センサーが動作し、画面が表示されます-Arduinに馴染みのある一般的なライブラリはすべてmbedで利用できます。
そして、3回目の呼び出しは「Arduino for $ 1」を部分的に繰り返しました。 それについて詳しく説明します。 アイデアは次のとおりです。私はARMを1ペンス欲しいと思っています。 バンドル(10個のチップ)を購入すると、 Aliexpressを開いて、アイテムあたり55セントで STM32F030F4P6を見つけます。
このチップはTSSOP20パッケージで作られているため、職人の使用には非常に不便です。 しかし、DIPケースをはんだ付けするのはすでに退屈で、ボードに穴を開けるのは面倒なので、これはさらに興味深いものです。 ちなみに、TSSOP-DIPライザーを使用できますが、大切な中国のバッグを待っている間に、私は自分のものを作りました。
コントローラー自体に加えて、水晶振動子、2つのコンデンサ、3つの抵抗器、1つのジャンパーがボード(片面)に配置されています。 デバッガを接続するためのピンを個別に出力します。 デバイスは純粋にテストおよびデモンストレーション用であり、レーキを収集するためおよび概念実証として、電源電圧レギュレータをまだ設定していません。 主なことは、5ボルトの電力を供給しないことです。
Mbedは、そのままではSTM32F030F4P6をサポートしていません。最も近いものはNucleo-F030R8です。 このボードは、ターゲットプラットフォームとして選択されます。 そして、親切な人がすでに mbedライブラリの修正版を作成しています。 ですから、ここには問題はありませんでした。
テスト
ここで、理論的には、伝説のBlinkの移植プロセスについて熱狂的な記述があったはずです。 ただし、変更されたライブラリの作成者がSPIがテストされていないと書いているため、テストはもう少し複雑になります。 そこで、ボード、中国のOLEDディスプレイ(128x64)、ブレッドブレッドボード上の電源モジュールからデザインを組み立て、 自作のST-Linkを接続します(ケースに入れたことはありませんが、少なくとも必要な要素を直接ボードにはんだ付けしました)ブリックからファームウェアコードを収集します。
レンガは次のとおりです。
1.変更されたmbedライブラリ。 プロジェクトからデフォルトを削除することを忘れないでください。
2. SSD1306ライブラリ-ディスプレイの操作用。 ロシア語のフォントを追加しました( ここからコードを盗みました )が、このプロジェクトには適用せず、ビットマップイメージの表示に限定しました。
3.最も基本的なmain.cpp。
ビットマップは、 LCD Assistantユーティリティを使用して準備されました。 家庭で最も便利なのは、1ビットのbmpファイルを入力し、Cでの使用に適したテキスト形式のバイト配列を生成することです。
そして、すべてがArduinoのようにほとんどです:
/* 0.96 12864 OLED. SPI_MOSI=PA_7 SPI_MISO=PA_6 SPI_SCK =PA_5 SPI_CS =PB_6 SPI_CS STM32F030F4, PB1 */ #include "mbed.h" #include "ssd1306.h" #include "standard_font.h" // 8, 6 (21 ) #include "bold_font.h" // 8, 8 (16 ) #include "russian_font.h" // experimental // LCD Assistant: Byte orientation - horizontal, const unsigned char habr [] = { , }; SSD1306 oled(PB_1 /* cs */, PA_4 /* reset */, PA_3 /* dc */, SPI_SCK /* clock */, SPI_MOSI /* data */); int main() { oled.initialise(); oled.clear(); oled.set_contrast(100); // 255 max contrast oled.drawBitmap(0, 0, habr, 128, 64, 1); oled.update(); } // EOF
コンパイルし、バイナリファームウェアファイルをダウンロードし、ST-Link Utilityを使用してコントローラーにアップロードし、目的の結果を取得します。 残念ながら、説明に値する問題は発生していません。
しかし、なんとか目を覚ますことができました。ボードレイアウトで2回間違えました。 何らかの理由で、NRST(リセット、アクティブレベル-低)をグランドに引き下げました。 そして、コーム間の距離は、愛情のこもった力と物理的な力のペアを適用しただけで、ボードがブレッドボードに正常に挿入されないようにしました。
合計
予算の32ビットARMマイクロコントローラーSTM32F030F4P6のコストは半額を少し超えています。 同時に-4キロバイトのRAMと16-フラッシュ。 ハーネスはおそらく別の20ルーブルですが、BOOT0ピンの周囲の「余分な部分」をすべて削除することで削減できます。 mbed開発環境は、同じIAR、Keil、またはCoocoxに比べて初心者にとってはるかに簡単に学習できますが、Arduino IDEの過度の原始主義に苦しむことはありません。 また、ST-Link Utilityのみをローカルコンピューターにインストールする必要があります。コンパイラーによる大騒ぎは除きます。
要約すると、私はとても気に入っています。 マイクロコントローラの分野の初心者には、mbedを開発用に推奨することが可能であり、必要であると考えています。 TSSOPをはんだ付けする必要はありません。Nucleoボードまたはその他のサポートされているボードを購入できます。最大で安い「最小」中国工芸品は3.8ドルです。