エビデイエビナイ電子工作

やったことの記録

STM32のレジスタを叩く。 #0 ~準備編~

f:id:Rappy:20191113182922j:plain

お久しぶりです、気づけば前回の投稿から約半年が経ちました。アウトプットって続かないですね。

この半年間を振り返ると、応用情報技術者試験にも無事合格し、ネットワークスペシャリストを受験したり、初めてハッカソンに出場してモノづくりをしたり、また技術書典やMakerFaire等の技術系のイベントにも行ってみるなど、新しいことをたくさん始められた半年だったなあと感じます。

さて、今回はまた新たなことを始めようと、STM32の開発/評価ボードのひとつであるNUCLEO-F446REを購入してみました。 あれ、LPCは? STM32 Nucleo Board STM32F446RE: マイコン関連 秋月電子通商-電子部品・ネット通販

STM32といえば、HALやLL(またはSPL)といったAPI(またはライブラリ)を利用してプログラムを書くのが一般的(?)かと思います。ネットでSTM32に関する記事を探すと、APIを利用したものがほとんどです。 これらのAPIを利用することで、開発者はレジスタやクロック等、ハードウェアの細かいところを意識することなく開発をすることができます。

しかし、今回はあえてAPIを利用せずに、直接レジスタを叩いて開発してみようと思います。 「なぜわざわざそんなことをするのか、素直にAPI使えばいいのに。」という話なんですが、その通りです。

APIを挟むとオーバーヘッドが動作に影響を及ぼすとか、そんな真っ当な(?)理由ではなく、なんとな〜くAPIによってブラックボックス化されている部分の中身が気になるとか、もともとAVRマイコンを触っていたこともあり、レジスタを叩くほうが慣れてるとか、まあそんな感じの理由です。そもそもSTM32のリソースをフルに使える程のスキルなんてないですし。

ということで、このシリーズはSTM32の各種ペリフェラルレジスタから利用する方法を、自分用ノートとしてまとめておく感じにしようと思います。 相変わらずマイペースな更新になるかと思いますがよろしくお願いします。

データシートとリファレンスマニュアル

さて、レジスタを直接叩くとなるとデーターシートやリファレンスマニュアルを読むことは必須となります。

まずは以下のリンクからデータシートとリファレンスマニュアルをブックマークまたはダウンロードしておきます。

データシート

Datasheet - STM32F446xC/E

リファレンスマニュアル

RM0390

開発環境

次に開発環境を整えます。このシリーズでは以下の環境で開発することを前提とします。

OS

Ubuntu 18.04LTS

STM32 開発/評価ボード

Nucleo F446RE (STM32F446)

akizukidenshi.com

初期化コード生成ツール

CubeMX www.st.com

Toolchain

GNU ARM Embedded Toolchain developer.arm.com

書き込みツール

st-link github.com

新規プロジェクト作成手順

開発環境が整ったら、まずは新規プロジェクトを作成します。

  1. CubeMXを起動し、File から New Project... を選択します。 ウィンドウが出てくるので、ここで開発に使用するボードまたはMCUを選びます。

    f:id:Rappy:20191113191136p:plain
    開発に使用するボードまたはMCUを選択

  2. Project ManagerのProjectタブでProject Nameを設定します。 また、Toolchain / IDEMakefileを選択します。

    f:id:Rappy:20191113191716p:plain
    Projectの設定

  3. Code Generatorタブに移動し、画像のように設定します。

    f:id:Rappy:20191113194750p:plain
    Code Generatorの設定

  4. GENERATE CODEを押すと、空のプロジェクトが生成されます。

    f:id:Rappy:20191113201347p:plain
    空のプロジェクトが生成される

  5. 生成されたMakefileのbinariesにgcc-arm-none-eabiのPATHを追記します。

例:

#######################################
# binaries
#######################################
BINPATH = PATH/gcc-arm-none-eabi/bin

これで新規プロジェクトの作成と設定は完了です。$ make allでmakeできることを確認します。

書き込み

NucleoをPCに接続し、

$ cd build
$ st-flash write <project_name>.bin 0x8000000

で書き込みができます。 コマンドが正常に終了すればOKです。


twitter.com