フォト
2025年4月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« M5Stack用CardKBをPS/2インタフェース対応にしてみる(3) | トップページ | BluePillボードで4桁7セグLEDの制御 »

2019年3月17日 (日)

Arduino STM32用タイマー割り込みライブラリを作成しました

Arduino STM32用のタイマー割り込みライブラリを作成しました。

・Arduino STM32用 簡易タイマー割り込みライブラリ (Tamakichi/STM32_TimerEvent)
  https://github.com/Tamakichi/STM32_TimerEvent

Arduino STM32では、最初から強力なタイマー割り込みライブラリがあるのですが、
少々設定が面倒なので、もう少しお手軽に使えるライブラリを作成しました。
(正確には、ラッパークラスライブラリですね)

次のような感じで使います。
BluePillボード上にあるLEDを0.5秒間隔で点滅するスケッチです。
#include "TimerEvent.h"

#define LED_PIN  PC13 // LEDピン

// タイマー割り込み管理
TimerEvent ticker;     

// タイマー割り込み呼び出し関数
void handle_timer() {
  static uint8_t sw = LOW;
  sw = !sw;
  digitalWrite(LED_PIN, sw);      // LEDの制御
}
 
void setup() {
  pinMode(LED_PIN, OUTPUT);
  ticker.set(500, handle_timer);  // 0.5秒間隔で handle_timer()を呼び出す
  ticker.start();                 // タイマー割り込み実行開始
}

void loop() {

}
 

設定できる割り込み間隔は 1ミリ秒 ~ としています。
利用するハードウェアタイマを明示的に指定することが出来ます。

次のような感じで複数のタイマー割り込みを同時実装することも出来ます。
また、割り込み優先度を指定することが出来ます。

// タイマー割り込み管理
TimerEvent ticker1(Timer1);
TimerEvent ticker2(Timer2);
TimerEvent ticker3(Timer3);
TimerEvent ticker4(Timer4);
・・・

ticker1.set(100, handle_timer1); ticker1.setPriority(14);
ticker2.set(200, handle_timer2);
ticker3.set(400, handle_timer3);
ticker4.set(800, handle_timer4);
・・・

ticker1.start();
ticker2.start();
ticker3.start();
ticker4.start();

上記では、ticker1の優先度をticker2 ~ ticker4 よりも上げています。
ticker1は、ticker2 ~ ticker4の割り込み処理実行中に更に割り込んで実行できます。
ticker1の割り込み実行中は、ticker2 ~ ticker4の割り込み実行は保留されます。

割り込み優先度の設定については、シリアル通信、I2C、ピン変化等の割り込み優先度も
考慮して設定する必要があります。

割り込み優先度は0~15の16レベルがあり、
デフォルトでは、すべての割り込み優先度は最低の15が設定(0が最優先)されています。
ただし、同一の優先度の場合は、割り込みベクター番号が小さいほど優先度が高いです。

このたりの詳細については、Arduino STM32の低レベルAPI nvic.h が参考になると思います。
Nested Vector Interrupt Controller (NVIC) support(nvic.h)


元祖 AVR版Arduinoでも割り込み機能はあるのですが、
優先度が固定のため、特定の割り込み処理中でI2C通信が出来ない等、
(I2Cの割り込み優先度は最低レベルに近い)
多重割り込みを使う場合、場合によっては色々と難儀しました。

その点、ARM cortex M3 の割り込み機構 NVIC はかなり強力で自由度があり
使いやすいです。

« M5Stack用CardKBをPS/2インタフェース対応にしてみる(3) | トップページ | BluePillボードで4桁7セグLEDの制御 »

arduino」カテゴリの記事

STM32」カテゴリの記事

コメント

こんにちは、いつも大変参考にさせてもらってます。
こちらのライブラリ利用してみたいのですがライセンスは何になるでしょうか?
よろしくお願いします。

nanbuwksさん、こんにちは

利用において特に制約を付けたくないのですが、ライセンスに関して
STM32_TimerEvent/LICENSE を追加しました。
「MITライセンス」とします。自由に流用、組み込み、配布OKです。

私自身、ライセンスに関しての知識に疎く、一番これがゆるいと認識しているのですが、どうでしょうか?

ありがとうございます。MITライセンスは使いやすいですね。活用させていただきます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Arduino STM32用タイマー割り込みライブラリを作成しました:

« M5Stack用CardKBをPS/2インタフェース対応にしてみる(3) | トップページ | BluePillボードで4桁7セグLEDの制御 »