SSブログ

STM32FをArduino IDEで開発的なメモの4乗くらい [STM32F]

色々あって、STM32FでやるArduinoは、以下にしています。

https://github.com/stm32duino

STM32duinoでは、STM32F_CPU_IDENTITYクラスを利用する事で、CPUの情報を色々取得する事ができます。
例えば、
#include <STM32F_CPU_Identity.h>
STM32F_CPU_IDENTITY cpu_id;としておいて、
cpu_id.sysload()でsystick timerの値、
cpu_id.hclk()でhclkの値、
cpu_id.pclk1()とcpu_id.pclk2()でpclk1とpclk2の値、
cpu_id.sysclk()でシステムクロックの値が取得できますん。
また、
uint32_t uid[3];
cpu_id.uID( uid );

で、3つのCPU IDが取得できますん。

そんなわけでCPUのクロック等の情報を取得できたのですが、では実際にArduino環境でSTM32Fの開発を行った場合、システムクロックはどうなっているんでしょうか?
と言うのが今回のお題。

STM32Fの開発に使用した基板はNUCLEOとかではなくオリジナルの基板であることから、Arduino IDEのボードの選択は”STM32F1 series”とし、Board parts numberは"Generic F103VETx"としています。つまりSTM32F103VETを搭載したマイコンボードです。

上記マイコンボードは、HSE用に8MHzのクリスタルを接続してあります。STM32F103VETは最大72MHzで動かすことができます。
しかしSTM32F_CPU_IDENTITYクラスで取得したシステムクロックは64MHzとなりました、、、う~~~ん。

結局ボードにGenericタイプを選んだ時にシステムクロックがどうなるのかと言うと、STM32duinoのツールチェインのvariantsにそれが有りました。例えば、以下の様なPATHにgeneric_clock.cが有りますん。

C:\Users\ユーザー名\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.0.0\variants\STM32F1xx\F103V(C-D-E)(H-T)

generic_clock.cのSystemClock_Config関数でシステムクロックの設定が行われており、標準ではHSIを使用し、HSIが8MHzですから8MHz÷2×16で64MHzの出来上がりです。

ですがSystemClock_Config関数はWEAK修飾子が付いています。
なのでユーザーが独自にSystemClock_Config関数を用意すれば、そちらが優先される事となります。

ユーザーがSystemClock_Config関数を生成するもっとも簡単な方法はSTM32CubeMXを使う事です。グラフィカルな画面でマウスでポチポチしていけばSystemClock_Config関数を生成してくれるので、それを取って来てスケッチに貼り付けるだけでOKです。以下参照してみてください。

https://github.com/hamayanShowa-ele/ArduinoShare/tree/main/F1F4_GET_CPU_ID
https://github.com/hamayanShowa-ele/ArduinoShare/tree/main/libraries

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。