Blue Pill(STM32duino)のanalogRead実行時間は約7μs
STM32duino環境のBlue Pillボード(STM32F103)によるanalogRead実行速度は約7μsです。次のsketchで実行時間を見てみました。
int val[10];
unsigned long startTime;
unsigned long endTime;void setup() {
pinMode(PA0, INPUT_ANALOG);
Serial.begin(115200);
}void loop() {
delay(1000);
startTime = micros();
val[0] = analogRead(PA0);
val[1] = analogRead(PA0);
val[2] = analogRead(PA0);
val[3] = analogRead(PA0);
val[4] = analogRead(PA0);
val[5] = analogRead(PA0);
val[6] = analogRead(PA0);
val[7] = analogRead(PA0);
val[8] = analogRead(PA0);
val[9] = analogRead(PA0);endTime = micros();
Serial.println(endTime - startTime);
}
analogReadを10回実行し、その時間(μs)を出力しています。forループにしていないのは、ループ処理の時間を含まないようにするためです。
実行結果は、次のような感じです。1秒ごとに結果出力。
70
70
71
70
70
70
70
71
70
70
70
arduino UNOでは、標準状態ではanalogRead実行時間は約100μsで、高速化(ADCの分周値16に変更)して約16μsぐらい。arduino M0 proも、標準の実行時間は約100μsと合わせられており、高速化(ADCの分周値64に変更)して、こちらも約16μsぐらいなので、Blue PillはUNOやM0に比べるとanalogReadがだいぶ高速です。ただし、精度については未確認。
おそらく、UNOやM0でも分周値をさらに小さくしてADCのクロックを速くすれば高速化できると思いますが、精度が悪くなると思われます。そのため、ググって見つかるanalogRead高速化では分周値16(UNO)になっていると思われます。