UP

TIM2のタイマー割り込みを使う

16bitタイマーのTIM2を使ってみる。前回 割り込みを使う では青ボタンが押されると液晶に表示される数値が1ずつ増えていったが、 今回はそれに加えて一定時間LED4が点灯するようにする。

プログラム概要

青ボタンが押されたらLED4をONにしTIM2のカウントアップを スタート、カウンタの値が設定した値になったら割り込みが発生しLED4を OFFにする。
TIM2の初期等は
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
  TIM2_DeInit();
  TIM2_TimeBaseInit(TIM2_Prescaler_128,TIM2_CounterMode_Up,2500);
  TIM2_UpdateRequestConfig(TIM2_UpdateSource_Global);
  TIM2_ITConfig(TIM2_IT_Update, ENABLE);
  TIM2_SelectOnePulseMode(TIM2_OPMode_Single);
カウンタの設定値は2500、クロックは16MHzでプリスケーラは128分周だから 2500 x 128 / 16M = 0.02 secだけLEDが点灯する。

割り込み

stm8l15x_it.cの記述。

青ボタンによる割り込み

INTERRUPT_HANDLER(EXTI1_IRQHandler, 9)
{
  itmp++; bp=1;
  /* ↓今回書き加えた行 */
  GPIO_HIGH(LED_BLUE_PORT,LED_BLUE_PIN); /* LED4 ON */
  TIM2_Cmd(ENABLE); /* TIM2スタート */
  /* ↑今回書き加えた行終わり */
  EXTI_ClearITPendingBit(EXTI_IT_Pin1);
}

TIM2割り込み

INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)
{
  GPIO_LOW(LED_BLUE_PORT,LED_BLUE_PIN); /* LED4 OFF */
  TIM2_ClearITPendingBit( TIM2_IT_Update ); /* 割り込みフラグクリア */
}

プロジェクト一式(zipファイル)mtim2.zip


2012.03
mm@ils.uec.ac.jp