プロジェクトを作る
STM32の製造・販売を行っているSTMicroelectronicsは以前はStandard Peripheral Libraryを提供していたが、今ではSTM32CubeMXとというツールとHAL driversも提供しており、どうもこちらを推しているらしい。よって当方もSTM32CubeMX & HAL driversを使用するようにしています。しかしながら意外とStandard Peripheral Libraryを使用した記事が多いので、まずはStandard Peripheral Libraryを使用したプロジェクトを作ってみます。
File >> New >> C++ Project を選択します。
Project name: にプロジェクト名を入力し、 Next > を押下します。
各項目に対し、ターゲットとするCPUにあった設定値を記述します。 STM32F0DISCOVERY の場合、STM32F051R8T6が搭載されています。こちらはFlashが64KB、RAMが8KB搭載されていますので、これに合わせます。 Clock(Hz) は初期値のままとしました。
Content: は Blinky (blink a led) と Empty (add your own content) から選択できます。手早くLEDがチカチカするところを確認したかったため、前者を選択しました。
Use system calls はデフォルトの Freestanding(no POSIX sysstem calls) で良いと思います。
Trace output は None(no trace output) としました。デフォルトの Semihosting DEBUG channel などの場合、Semihosting としての設定が必要となるようです。設定できていなければ、実行時にTRAPが発生するようです。
その他のチェックボックスもデフォルトのままとしました。
こちらの画面についてもデフォルトのままとし Next > ボタンを押下します。
この画面でもデフォルトのまま。 Next > を押下します。
Toolchain name はデフォルトの GNU Tools for ARM Embedded Processors (arm-none-ebi-gcc) としました。また、 Toolchain path には、インストールしたToolchainのディレクトリを指定します。
設定できたら、 Finish ボタンを押下します。
ここまでできたらビルドしてみましょう。 Projcec >> Build Project を選択します。
ToolchainのPathに誤りがなければ以下のようなメッセージとともにビルドが終了します。
22:36:39 **** Build of configuration Debug for project Sample ****
make all
Building file: ../system/src/stm32f0-stdperiph/stm32f0xx_gpio.c
:
arm-none-eabi-size --format=berkeley "Sample.elf"
text data bss dec hex filename
4065 176 412 4653 122d Sample.elf
Finished building: Sample.siz
22:36:41 Build Finished (took 2s.500ms)
デバッグについて
まず、OpenOCDを起動します。
Run >> External Tools から設定済みのOpenOCDの起動コマンドを実行します。
成功した場合は、以下のようなメッセージが出力されます。
Open On-Chip Debugger 0.9.0 (2015-05-28-12:05)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v25 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.880856
Info : stm32f0x.cpu: hardware has 4 breakpoints, 2 watchpoints
また、STM32F0DISCOVERYの場合は LD2 が緑と赤とか交互に点滅します。
次に Run >> Debug Configurations… を選択します。
*Zylin Embedded debug(Native)を選択し、新規作成します。
Debugger タブでは、 Debugger に Embedded GDB を選択します。また、 GDB debugger には、インストールしたToolchainに含まれる gdb を選択します。
‘Initialize’ commands には以下のとおり入力します。
target extended-remote localhost:3333
monitor reset init
load
monitor reset halt
設定できたら、 Apply を押下した後、 Debug ボタンを推してみよう。
うまく動作した場合、 start , main で停止するので、その都度 Resume を行うと LD3 が点滅します。