STM32で4chオシロを作ろう!
今回は、STM32の外部pin割り込み(EXTI)をどうやって動かすのかを書きます.わりと簡単でした.
EXTIは最大何本まで使えるのか?
STM32F205の割り込み回路の制約により、14本がmaxです.
どのGPIOをEXTI pinとして使えるのか?
GPIOx0、GPIOx1、GPIOx2、GPIOx5、GPIOx6、GPIOx7、GPIOx8、GPIOx9、
GPIOx10、GPIOx11、GPIOx12、GPIOx13、GPIOx14、GPIOx15
以上で14本です.
xには、GPIOAやGPIOBのような、ABC....があてはまります.
数字は、EXTIの番号です.EXTI3とEXTI4が欠番になっています.
注意: GPIOA0 と GPIOB0 のように、x違いだが同一ナンバーはダメです.
なぜなら、例えばEXTI0の割り込みセレクタ回路がこのようになっているからです.PA0とPB0は排他的です.EXTI1~EXTI15も同様な回路になっています.
なぜなら、例えばEXTI0の割り込みセレクタ回路がこのようになっているからです.PA0とPB0は排他的です.EXTI1~EXTI15も同様な回路になっています.
PB12をEXTI12に結び付けるのはこのようにします.PB12にスイッチを付けてON/OFFすると割り込みがかかるようにしたいわけです.
↓GPIOの設定で、割り込みを受付けるエッジを設定し、お好みに応じてPull-upを設定します.↓EXTIをEnableにします.割り込み優先度はここでは3にしましたがお好みでどうぞ.↓IRQ codeを生成させます.source codeの勘所
HALライブラリの作法に則ります.
EXTIのHALライブラリによると、ユーザー定義で
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
という関数を作ってその中でよしなにやれ、となっています.
どうしてそうなっているのかの説明は割愛しますが、この関数がEXTI割り込みで呼ばれます.GPIO_PinにはEXTI番号が入っていますので、処理routineをGPIO_Pinで分岐させます.
こんなtest codeで動作確認できました.例えばPB12に付けたスイッチを押すと、USB COMに"12"が出力されます.したがって、TerminalアプリでCOM portをモニタすると、スイッチが押されたら12と表示されます.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin) {
case GPIO_PIN_0: CDC_Transmit_FS("0 ",2); break;
case GPIO_PIN_1: CDC_Transmit_FS("1 ",2); break;
case GPIO_PIN_2: CDC_Transmit_FS("2 ",2); break;
case GPIO_PIN_3: CDC_Transmit_FS("3 ",2); break;
case GPIO_PIN_4: CDC_Transmit_FS("4 ",2); break;
case GPIO_PIN_5: CDC_Transmit_FS("5 ",2); break;
case GPIO_PIN_6: CDC_Transmit_FS("6 ",2); break;
case GPIO_PIN_7: CDC_Transmit_FS("7 ",2); break;
case GPIO_PIN_8: CDC_Transmit_FS("8 ",2); break;
case GPIO_PIN_9: CDC_Transmit_FS("9 ",2); break;
case GPIO_PIN_10: CDC_Transmit_FS("10 ",3); break;
case GPIO_PIN_11: CDC_Transmit_FS("11 ",3); break;
case GPIO_PIN_12: CDC_Transmit_FS("12 ",3); break;
case GPIO_PIN_13: CDC_Transmit_FS("13 ",3); break;
case GPIO_PIN_14: CDC_Transmit_FS("14 ",3); break;
case GPIO_PIN_15: CDC_Transmit_FS("15 ",3); break;
default: ;
}
}
なお、ここでのGPIO_PIN_xはビットマスクですので、GPIO_PIN_5=5だと思ってるとハマります.
今宵は此処までにしとうございます.
#スイッチがチャタるので、TIMで不感時間を200mSぐらい設けると回避できます
かしこ
0 件のコメント:
コメントを投稿