STF32 STmicroのシリアルモニタ クロック設定

STF32 STmicroのシリアルモニタ クロック設定が曲者だった件

STmicroのマイコンボードにはmbed対応のNucleoシリーズがあって大変お安く入手できるので、初めてSTのマイコンを触るものにとっては大変ありがたいボードだ。

ただ昨今は開発環境が乱立して、何が一番良いのかをいちいち悩んでしまう贅沢な状況が発生しているように思う。

一昔前なら、メーカーが用意した環境を有償で使うしかなかった。どんなに使いにくくても、それなりに使いこなすことが美徳でもあった。無償の誘惑からgccに手を出すと、どんどん泥沼にはまって最後は諦めるという無駄時間を使うことになってしまうのが落ち。もちろんインターネットが無かった時代ね。

今はSTmicroelectronicsなら、純正STM32Cube、mbed、Eclipse+gcc、IAR、おまけにArduinoまで選べる。今はどれにするか迷っている時間が無駄時間なのかも知れない、と思い一先ずはメーカー環境にて。

 

本題はあっさりと。

以下の単純なことで悩んだのだけど、きっと他にも同じように悩んでる方がおられるように感じるので、記事にしておく。

純正STM32CubeはEclipseなので、gdbでデバッグできる。ここまではOK。だけど、ST-Linkなどで繋いだPCでいわゆる printfデバッグをしようとするとハマる。文字化けが起きる。

 

以下注意すること。

下のデバイスコンフィグレーション画面を開いて、ちゃんとCYCCLKを調べる。

この一点!

上記だと64MHz。 デフォルトでは、STF32は、HSI+PLLという外付けXtal無で8MHzRC発振を逓倍してCoreClockを生成している。なのでこのSYSCLKの値がすべての元になってくる。

ST-LINK UtilityのSerial Wire Viewer では以下の場所で System clockを設定すれば良い。

printfをSWOへ出力するには、以下関数をオーバーライドしておくこと。main()の適当なユーザエリアに置く。

#include <stdio.h>
int _write(int file, char *ptr, int len)
{
int DataIdx;
for(DataIdx=0; DataIdx<len; DataIdx++)
{
ITM_SendChar(*ptr++);
}
return len;
}

 

 

パッケージに同梱してある説明書きには、72MHzって書いてある。

もちろんこれ最高値なんだけど、個別ボードを買って72HMzと書いてあったら72MHzだと信じるのが普通だと思うのだが・・・。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です