8

いくつかの Arduino ライブラリを stm32 に移植しようとしています。Arduino ではmillis()、起動からのミリ秒数を返します。stm32に同等の機能はありますか? stm32f0 MCU を使用しています。

4

8 に答える 8

14

SysTickこの目的のために提供される ARM コア ペリフェラルです。これをニーズに合わせて調整します。

まずは初期化

// Initialise SysTick to tick at 1ms by initialising it with SystemCoreClock (Hz)/1000

volatile uint32_t counter = 0;
SysTick_Config(SystemCoreClock / 1000);

割り込みハンドラを提供します。コンパイラでは、割り込みハンドラを追加の属性で装飾する必要がある場合があります。

SysTick_Handler(void) {
  counter++;
}

これがあなたのmillis()関数です。これ以上簡単にはなりません:

uint32_t millis() {
  return counter;
}

注意すべきいくつかの注意事項。

  1. SysTick は 24 ビットのカウンターです。オーバーフローでラップします。値を比較したり、遅延メソッドを実装したりするときは注意してください。

  2. SysTick は、プロセッサ コア クロックから派生します。電力を節約するためにコアクロックを遅くするなど、コアクロックをいじる場合は、SysTick 周波数も手動で調整する必要があります。

于 2016-06-04T08:12:14.870 に答える