STM32 Nucleo F401REとmbedでリセットからプログラム実行までに10秒ぐらいウェイトが入るやつの対策

f:id:yklycoris:20150718132358p:plain

2015年7月18日時点の記事です。

昨日ひさしぶりにmbedとNucleo F401REでセンサのテストプログラムを作ったら、マイコンのリセットからプログラムの実行までに10秒程度のウェイトが入るようになっていることに気づきました。

調べたところここに原因はこれのようです。

STM32F4: HSE timeout increased from 0.5s to 5s, needs 10seconds to fallback to HSI · Issue #1096 · mbedmicro/mbed · GitHub

ざっと読んだところ、よくわかりませんでしたがSTの新型マイコンにmbedを対応させるためにmbedライブラリの実装を旧式のSPLから新式のCubeMX(HAL)に変更したがなんか都合があって5秒x2で10秒のディレイが入っているらしい。

 

対策としては、mbedのソースライブラリをインポートして該当部分を書き換えるだけです。mbedがオープンソースになってるのに昨日気づきました。

該当部分は以下です。

mbed/stm32f4xx_hal_conf.h at master · mbedmicro/mbed · GitHub

 

 

手順

標準のコンパイル済みmbedライブラリを削除して、mbed-srcライブラリをインポートします。ちょっと読み込みに時間がかかります。

mbed-src - a mercurial repository | mbed

以下のファイルを開きます。

mbed-src\targets\cmsis\TARGET_STM\TARGET_STM32F4\TARGET_NUCLEO_F401RE\stm32f4xx_hal_conf.h

104行目の

#define HSE_STARTUP_TIMEOUT ((uint32_t)5000)

#define HSE_STARTUP_TIMEOUT ((uint32_t)500)

に変更するとウェイト時間は1秒になります。

 

感想

電源入れてから起動まで10秒もかかるのはかなりアレなのでそのうち戻るんじゃね(適当)

mbedってArduinoより性能高いし色々良いところはあるけど日本語情報はあんまりないのでなんか気づいたら積極的に情報を公開すべし。