(2015.5.20 作成)
(2015.9.22 更新)
(2015.10.24 更新)
STM32を用いた割り込み処理を行うクラスです。STM32の場合割り込みによって呼び出される関数名が決められていますので、この名前の関数を作成する必要があります。mbedのように複雑な処理を前提とすればどのような関数名でもよくなるのですが、処理としてシンプルではなくなるのであえて関数名はSTマイクロさんの定義のままです。
ピン0~15それぞれに割り込みを行うことが出来ます。一方注意点もあって、たとえばPA0, PB0などは共通の関数 EXTI0_IRQHandlerが呼び出されますが、Port A, Port Bなどのどれか一つしか割り込みを設定できません。つまりPA0で割り込みを定義するとPB0やPC0で割り込みを行うことが出来ませんので注意してください。
コンストラクタ |
||
プロトタイプ |
InterupptIn(GPIO_TypeDef* GPIOx, const uint32_t &Pin, const PinPuPdMode &PPmode = No_Pull,
const ITmode &ITMode = IT_Rising); |
|
戻り値 |
なし |
|
引数 |
GPIO |
Port設定 |
Pin |
Pin設定 |
|
PPmode |
Pull-UP / Pull-Down設定 |
|
ITMode |
立ち上がり、立下りエッジで割り込み発生するか |
|
備考 | 自動で割り込みが許可になります。手動で割り込みOn/Offを行いたいときは直後にdisable_irq()を呼び出してください。 |
割り込みを使用するピンによって以下の呼び出し関数をプログラム内に作成してください。注意点としてはextern "C"の宣言がなければC++の関数として処理されるので必ず extern "C"を付けるようにしてください。下にあるサンプルプログラムを参照していただければと思います。
|
STM32F303xC (STM32 F3Discovery) |
STM32F401xE (NucleoF401RE) |
Px0 | EXTI0_IRQHandler | EXTI0_IRQHandler |
Px1 | EXTI1_IRQHandler | EXTI1_IRQHandler |
Px2 | EXTI2_TSC_IRQHandler | EXTI2_IRQHandler |
Px3 | EXTI3_IRQHandler | EXTI3_IRQHandler |
Px4 | EXTI4_IRQHandler | EXTI4_IRQHandler |
Px5~9 | EXTI9_5_IRQHandler | EXTI9_5_IRQHandler |
Px10~15 | EXTI15_10_IRQHandler | EXTI15_10_IRQHandler |
このサンプルコードをNucleoF401REで実行するとボタンを押すごとにLEDがトグルします。書き込み方法等についてはこちらを参照にしてください。
#include "DKS_Util_F401xE.h" #include "DKS_GPIO_F401xE.h" DKS::InterupptIn *button; DKS::DigitalOut *ld; int main(void) { DKS::InitSystem(); button = new DKS::InterupptIn(GPIOC, GPIO_PIN_13, DKS::No_Pull, DKS::IT_Rising); ld = new DKS::DigitalOut(GPIOA, GPIO_PIN_5); while (1); } extern "C" void EXTI15_10_IRQHandler(void) { if(__HAL_GPIO_EXTI_GET_IT(button->Pin) != RESET) { __HAL_GPIO_EXTI_CLEAR_IT(button->Pin); if (button->Debounce()==1) ld->toggle(); } }