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()でシステムクロックの値が取得できますん。
また、
で、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
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
2021-07-29 13:09
nice!(0)
コメント(0)
コメント 0