🙆

プロジェクトの設定

2020/09/29に公開

プロジェクトの設定

Rust Embedded WGが用意してくれているcortex-m-quickstartをベースにプロジェクトを設定する

stm32l4xx-halなどHALを提供してくれているプロジェクトをベースに進めても良いかもしれません

プロジェクトの更新

cortex-m-quickstartの初期状態ではNucleo-L476RGに適していない部分があるのでプロジェクトを更新する必要がある。具体的には、下記の設定を更新する

  • プロジェクトの初期設定
  • メモリ設定
  • コンパイラの設定
  • OpenOCDの設定

プロジェクトの初期設定

cortex-m-quickstartをクローンした状態ではCargo.tomlがビルドできる状態ではないため、アップデートする。

  • 修正前
[package]
authors = ["{{authors}}"]
edition = "2018"
readme = "README.md"
name = "{{project-name}}"
version = "0.1.0"

[dependencies]
cortex-m = "0.6.0"
cortex-m-rt = "0.6.10"
cortex-m-semihosting = "0.3.3"
panic-halt = "0.2.0"

# Uncomment for the panic example.
# panic-itm = "0.4.1"

# Uncomment for the allocator example.
# alloc-cortex-m = "0.3.5"

# Uncomment for the device example.
# Update `memory.x`, set target to `thumbv7em-none-eabihf` in `.cargo/config`,
# and then use `cargo build --examples device` to build it.
# [dependencies.stm32f3]
# features = ["stm32f303", "rt"]
# version = "0.7.1"

# this lets you use `cargo fix`!
[[bin]]
name = "{{project-name}}"
test = false
bench = false

[profile.release]
codegen-units = 1 # better optimizations
debug = true # symbols are nice and they don't increase the size on Flash
lto = true # better optimizations

具体的には最低限以下を修正する

  • {{authors}}の部分を自分の名前に変更
  • {{project-name}}の部分を適当なプロジェクト名に変更(2箇所)
  • コメントアウトされている[dependencies.stm32f3]の部分をターゲットボードに合わせる
  • stm32l4xx-halを使えるようにする

後半の2つの部分を記載する

[dependencies.stm32l4]
version = "0.11.0"
features = ["stm32l4x6", "rt"]

[dependencies.stm32l4xx-hal]
# path = "../stm32l4xx-hal"
version = "0.5.0"
features = ["stm32l4x6", "rt"]

stm32l4xx-halはVersion0.5.0だとデフォルトでNucleo-L476RGのI2Cが使えない。最新のcrateを使うためには最新のプロジェクトをクローンする必要がある。そのため、pathを記載している場所がある

メモリ設定

Nucleo-L476RGのデータシートを確認して、メモリ配置を更新する。メモリ配置はmemory.xで設定する。アップデート後の値を以下に示す。

MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  /* TODO Adjust these memory regions to match your device memory layout */
  /* These values correspond to the LM3S6965, one of the few devices QEMU can emulate */
  FLASH : ORIGIN = 0x08000000, LENGTH = 1024K
  RAM : ORIGIN = 0x20000000, LENGTH = 96K
}

コンパイラの設定

Nucleo-L476RG用のバイナリを作成するためにコンパイラの設定を行う。設定はcortex-m-quickstart/.cargo/configに記載する。

関係をする部分を記載する。

Nucleo-L476RG用のQUEMで適切なものが無いためここでは記載をしません。GNU ARM Eclipse QEMUのSTM32F411REをターゲットにした場合が一番メモリが近いです。

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
# デフォルトでOpenOCDでデバッグする
runner = "gdb-multiarch -q -x openocd.gdb"

[build]
target = "thumbv7em-none-eabi"   # Cortex-M4 and Cortex-M7 (no FPU)

OpenOCDの設定

ターゲットボードに合わせてOpenOCDの設定ファイルopenocd.gdbを更新する

今回はWSL2+Dockerを使って環境を構築する。WSL2は現状ではUSBのマウントが出来ないようなので、OpenOCDの利用はPowerShellなどWindows側の設定を思料するためopenocd.cfgは更新する必要がない

今回はDocker上で動作させるため、コンテナからホスト側で起動したOpenOCDに接続する必要がある。そのため、IP アドレスを指定する必要がある。具体的には、1文目を次のようにする。

target extended-remote host.docker.internal:3333

Discussion