Arduino STM32用タイマー割り込みライブラリを作成しました
Arduino STM32用のタイマー割り込みライブラリを作成しました。
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」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「STM32」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- 「Arduino STM32 リファレンス 日本語版」が2万アクセス突破!(2021.03.26)
- SPI接続フラッシュメモリモジュールを入手しました(2020.05.13)
- Arduino STM32でキャラクタ液晶ディスプレイを使う(2019.06.01)
コメント
« M5Stack用CardKBをPS/2インタフェース対応にしてみる(3) | トップページ | BluePillボードで4桁7セグLEDの制御 »
こんにちは、いつも大変参考にさせてもらってます。
こちらのライブラリ利用してみたいのですがライセンスは何になるでしょうか?
よろしくお願いします。
投稿: nanbuwks | 2019年11月 4日 (月) 07時12分
nanbuwksさん、こんにちは
利用において特に制約を付けたくないのですが、ライセンスに関して
STM32_TimerEvent/LICENSE を追加しました。
「MITライセンス」とします。自由に流用、組み込み、配布OKです。
私自身、ライセンスに関しての知識に疎く、一番これがゆるいと認識しているのですが、どうでしょうか?
投稿: たま吉さん(管理者) | 2019年11月 4日 (月) 17時16分
ありがとうございます。MITライセンスは使いやすいですね。活用させていただきます。
投稿: nanbuwks | 2019年11月 5日 (火) 02時57分