STM32CubeIDEでMbedを動かしてみる その2

STM32CubeIDEでMbedを動かしてみる その2

今回は 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 クラスを取り扱ってみようと思います。

結構しんどかったですね。
お疲れさまでした。

Mbedカテゴリの最新記事