プロジェクトの設定
プロジェクトの設定
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