SNSへはこちら

Rustで組み込みプログラミング for STM32(1) – 導入

マイコンプログラミング用の言語として C 言語をこれまで使ってきたんですが、いい加減飽きました(結構前から)。ですので新作マイクロマウスのソースコードは C++ で書いてきたんですが、こちらも飽きてきました。所詮 Better C としての使用しかしていないので当然っちゃ当然ですが。

そうだ、Rust、やろう。

きっかけは今年の Mice 技術交流会。ここで関数型プログラミングのススメ的な発表を聞きまして、そこで Rust と言う言語が出てきました。正直聞いたことはあってもなんとなく手を出していなかったので、今の暇な時期にいいかとちょいとやってみた次第。
やってみて結構僕が好きなタイプの言語だと感じました。それは

  • 「変数に値を入れる」のではなく、「値を名前で束縛する(バインドする)」という考え方
  • デフォルトであらゆるものがイミュータブル
  • ほぼすべての記述が文でなく式である
    • if 文も式。ブロック化出来る三項演算子的に使えるという。
  • impl による機能の実装

と言う特徴があるからだと考えられます。僕の所感なんてどうでもいいので次行きましょうか

Cortex-MをサポートするRustのクレートがある

クレートとはパッケージの意味です。即ち ARM Cortex-M シリーズのライブラリパッケージが存在するということで、Rust による組み込みプログラミングが可能になっているらしいです。ただコア用のライブラリがあるだけですので、このクレートではペリフェラル向けの構造体や関数は特には実装されていません。

然しながら、STM32F30x 向けには HAL があるとのことです(他があるかは調べてみてください)。僕は F3 シリーズ好きですので悦びました。ということで、STM32 のプログラムを Rust で書いてみようと思いました。
色々ググったり書き込んでみたりして良い感じのものを探しました。順に御覧ください。

Get Started

では STM32 への始め方です。Rust 関連ツール(Cargo や Xargo)の入れ方はご自身でお調べください。

STM32F3 Discoveryでお気軽に

この評価ボード用に Rust 用のリポジトリが有ります。こちらを使えばさくっと Lチカができます。

Discover the world of microcontrollers through Rust! - rust-embedded/discovery

ですが、まぁクレートの構造とか、このプロジェクト特有のライブラリのリバースエンジニアリングが面倒だったので僕は投げました。しかしながら、この優秀なプロジェクトによって本当に Rust で ARM Cortex-M4 が動かせることがわかったという収穫が有ります。

cortex-m-quick-startプロジェクト

プロジェクトのテンプレートらしいです。ですが既に構造がごちゃごちゃしていてなんかなぁと言った感じです。なので次に示すようにプロジェクトテンプレートを自作します

自作プロジェクト

書いてて思ったのですが、ちょっと長くなりました。なので次の記事に続きます…