STM32のレジスタを叩く。 #0 ~準備編~
お久しぶりです、気づけば前回の投稿から約半年が経ちました。アウトプットって続かないですね。
この半年間を振り返ると、応用情報技術者試験にも無事合格し、ネットワークスペシャリストを受験したり、初めてハッカソンに出場してモノづくりをしたり、また技術書典やMakerFaire等の技術系のイベントにも行ってみるなど、新しいことをたくさん始められた半年だったなあと感じます。
さて、今回はまた新たなことを始めようと、STM32の開発/評価ボードのひとつであるNUCLEO-F446REを購入してみました。
あれ、LPCは?
STM32 Nucleo Board STM32F446RE: マイコン関連 秋月電子通商-電子部品・ネット通販
STM32といえば、HALやLL(またはSPL)といったAPI(またはライブラリ)を利用してプログラムを書くのが一般的(?)かと思います。ネットでSTM32に関する記事を探すと、APIを利用したものがほとんどです。 これらのAPIを利用することで、開発者はレジスタやクロック等、ハードウェアの細かいところを意識することなく開発をすることができます。
しかし、今回はあえてAPIを利用せずに、直接レジスタを叩いて開発してみようと思います。 「なぜわざわざそんなことをするのか、素直にAPI使えばいいのに。」という話なんですが、その通りです。
APIを挟むとオーバーヘッドが動作に影響を及ぼすとか、そんな真っ当な(?)理由ではなく、なんとな〜くAPIによってブラックボックス化されている部分の中身が気になるとか、もともとAVRマイコンを触っていたこともあり、レジスタを叩くほうが慣れてるとか、まあそんな感じの理由です。そもそもSTM32のリソースをフルに使える程のスキルなんてないですし。
ということで、このシリーズはSTM32の各種ペリフェラルをレジスタから利用する方法を、自分用ノートとしてまとめておく感じにしようと思います。 相変わらずマイペースな更新になるかと思いますがよろしくお願いします。
データシートとリファレンスマニュアル
さて、レジスタを直接叩くとなるとデーターシートやリファレンスマニュアルを読むことは必須となります。
まずは以下のリンクからデータシートとリファレンスマニュアルをブックマークまたはダウンロードしておきます。
データシート
リファレンスマニュアル
開発環境
次に開発環境を整えます。このシリーズでは以下の環境で開発することを前提とします。
OS
Ubuntu 18.04LTS
STM32 開発/評価ボード
Nucleo F446RE (STM32F446)
初期化コード生成ツール
CubeMX www.st.com
Toolchain
GNU ARM Embedded Toolchain developer.arm.com
書き込みツール
st-link github.com
新規プロジェクト作成手順
開発環境が整ったら、まずは新規プロジェクトを作成します。
CubeMXを起動し、File から New Project... を選択します。 ウィンドウが出てくるので、ここで開発に使用するボードまたはMCUを選びます。
Project ManagerのProjectタブでProject Nameを設定します。 また、Toolchain / IDEでMakefileを選択します。
Code Generatorタブに移動し、画像のように設定します。
GENERATE CODEを押すと、空のプロジェクトが生成されます。
例:
####################################### # binaries ####################################### BINPATH = PATH/gcc-arm-none-eabi/bin
これで新規プロジェクトの作成と設定は完了です。$ make all
でmakeできることを確認します。
書き込み
NucleoをPCに接続し、
$ cd build $ st-flash write <project_name>.bin 0x8000000
で書き込みができます。 コマンドが正常に終了すればOKです。