1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (15) TimerでLチカしよう

Posted at

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (14) PWMでサーボモーター(SERVO)を動かしてみようの続きです。
https://qiita.com/usashirou/items/59410a385ac930e0f5b2

今回は、タイマーを使ってLEDを光らせます。
なんだ、Lチカか
と思われると思いますが、タイマーを使うLチカは割り込みが入っており、意外と面倒です。
今回は、簡単なコマンドがあるのでこれでやってみましょう。

設定する

まず今回、使うのは、LEDなのでLD2ですね。
これにはTimer2 TIM2がアサインされています。

image.png

左側のTimersからTIM2を選択し
ClockSouceをInternalClockにします。
image.png
次は、クロックの設定です。
Clock Configurationをクリックし、最後の周波数を42MHzにします。
image.png

次は、出力を1Hzにします。
1Hzとすることで1秒間に1回動くこととなります。
42MHzを1Hzにするために42000000で割る必要があります。
今回は、42000と1000で割ります。
(0が含まれるので-1かな??)
image.png
次にNVICを設定します。
NVICは割り込みの機能になります。
GlobalInterruptのチェックを入れます。
image.png

これで、1Hz毎に割り込みが入ることになります。
Generationでコードを生成します。

プログラム

今回は以下を追加します。

  HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE BEGIN 4 */
void  HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
}
/* USER CODE END 4 */

初めに、タイマーを起動させます
HAL_TIM_Base_Start_ITは割り込みあり
HAL_TIM_Base_Startは割り込みなしです

今回は割り込みありなのでHAL_TIM_Base_Start_ITを選択します
image.png
Tim2を選択します。
image.png

これで割り込み機能付のタイマーが始動しました。
次は、LEDを点滅するプログラムです。
プログラム自身は
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
ですね。
では、起動させるには?
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
と入れます。
image.png

これに先ほどのLチカのプログラムを入れればLEDが割り込み毎に点滅するようになります。

あれ?
Mainのプログラムに何も入っていない。
そうです、これは、1秒間に一回1Hz毎に割込みが動くのです。

割込みが入るとHAL_TIM_PeriodElapsedCallbackに飛びます。
ここで、LEDを点滅するプログラムを入れれば動作可能となります。

* 参考 [メモ] タイマー割り込みでLチカ (STM32L1-TIM2使用)

これを拡張すれば、いろいろな事が出来ますね

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?