今回は STM32CubeIDEでMbedを動かしてみる の続きです。
投稿時の開発環境を記しておきます。
PC:Windows10 OS
IDE: STM32CubeIDE Version1.1.0
Configurator: STM32CubeMX Version5.4.0
Board: STM32Nucleo-F401RE
STM32F401のプロジェクトの環境を整える
さっそくなのですが、ビルドしてみましょう。
ここからはエラーがたくさん出てくるので、それらをひとつずつ解消していく作業になります。
Project Eplorer で F401mbedBase プロジェクトを選択しておいて、Project – Build Project を選択します。
Consoleに以下のエラーが出ます。
…/Serial.h:71:72: error: ‘MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE’ was not declared in this scope
…/RawSerial.h:65:50: error: ‘MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE’ was not declared in this scope
これらの定義は mbed_config.h に書かれていました。はて、インクルードのし忘れでしょうか?
Serial.h と RawSerial.h に次の1行を書き加えます。
#include “mbed_config.h”
ビルドすると次のエラー他が出ます。
…/UARTSerial.h:58:51: error: ‘MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE’ was not declared in this scope
UARTSerial.h に同じく次の1行を書き加えます。
#include “mbed_config.h”
ビルドすると次のエラー他が出ます。
…/mbed_retarget.cpp:466: multiple definition of `_open’
Core/Src/syscalls.c にある _open 等の関数が重複していると言っています。
syscalls.c の次の6つの関数を削除します。
_close , _exit , _fstat , _isatty , _lseek, _open
Project Explorer で Core/Src/syscalls.c をたどっていき、
> syscalls.c の > をクリックして V にして展開します。
重複している関数には×がついているので、ダブルクリックすることで関数のところにたどり着くことができます。
ビルドすると次のエラー他が出ます。
…/system_clock.c:65: multiple definition of `SystemInit’
Core/Src/system_stm32f4xxx.c にある SystemInit 等の関数が重複していると言っています。
system_stm32f4xxx.c を削除してみます。
Project Explorer で system_stm32f4xxx.c を選んで右クリックして Delete を選択します。
ビルドすると次のエラーが出ます。
…/F401mbedBase/Debug/../mbed-dev/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F401xE/device/TOOLCHAIN_GCC_ARM/startup_stm32f401xe.S:132: multiple definition of `Default_Handler’
これは割り込みベクタが重複していると言っています。
割り込みベクタを定義しているファイルが重複しているので、ひとつを削除します。
Project Explorer でたどっていき startup_stm32f401xe.S を右クリックして Delete を選択します。
(以下の画像を参考にしてたどってください)
ビルドするとエラーが全てなくなりました。
一息つくことができました。
MbedでLチカしてみる
MbedではC++のクラスを使いますので、Project Explorer から Core/Src/main.c を右クリックして、Rename を選択し main.cpp に名前をかえます。
LチカするためにはGPIO出力の DigitalOutクラスを使います。
DigitalOutクラスについては こちら を参考にしてみてください。
次に main.cpp の以下の部分(2か所)をコーディングしてみてください。
/* USER CODE BEGIN Includes */
#include "mbed.h"
/* USER CODE END Includes */
int main(void)
{
/* USER CODE BEGIN 1 */
DigitalOut led(LED1);
led = 1;
led = 0;
led = 1;
led = 0;
/* USER CODE END 1 */
ビルドしてF5キーでステップ実行してみてください。
おぉ、Lチカしました。感動の涙。。
次回は Mbed の Serial クラスを取り扱ってみようと思います。
結構しんどかったですね。
お疲れさまでした。
この続きを読むには こちら からどうぞ。
コメントを書く