今頃気づいたのかという話ですが、STM32のクロック系にはPLLがあるので、任意の周波数にアップコンバートできます、従ってST-Linkの水晶発振器を使ってそれを基準周波数に使えば(Nucleoを切り離さない限り)、安定したクロックになります
で、ST-Linkの水晶使って最大動作周波数に設定した時のコンフィグは以下の通り
前の記事、
https://isehara-3lv.sakura.ne.jp/blog/wp-admin/post.php?post=5082&action=edit
ではこういうコンフィグ
従ってペリフェラルだけじゃなくて、MCUやDMAのクロックまで落とされていました
ちなみにこの状態でADCのCounter Settingを変更して前回と同じサンプリング周波数(10KHz)にした時の実行時間は、
なぜ時間測定がクロック周波数変えても変わらないのか疑問に思いましたが、以下のコードに見るようにクロック周波数は時間の分解能を決めてはいますが、経過時間には無縁だから
float getTimeUs(uint32_t count)
{
float us = 1000000 * (float)count / (float)SystemCoreClock;
return us;
}前回の実行時間は12,829μsだったので微妙に速くなっています、DMA中の処理時間は見えてこない(8MHzで間に合ってしまう)だろうから、それ以外の前後のMCUの処理時間の84MHzと8MHzのクロック周波数の差分だろうと思います
クロックの種類がたくさんありますが、大きく用途ごとに分類すると、
・HCLK:MCU周りのバスクロック
・FCLK:MCUのコアクロック
・APB1:peripheralは低速の周辺デバイスI2C, USART2/3, SPI2/3, CAN, PWR などで最大42MHz、timer clockはTim2~7用
・APB2:APB1より高速の周辺デバイス用でTIM1, ADC, GPIOなど、timer clockは相対的に高速なTim1用
admin



