STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (15) TimerでLチカしよう
STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (14) PWMでサーボモーター(SERVO)を動かしてみようの続きです。
https://qiita.com/usashirou/items/59410a385ac930e0f5b2
今回は、タイマーを使ってLEDを光らせます。
なんだ、Lチカか
と思われると思いますが、タイマーを使うLチカは割り込みが入っており、意外と面倒です。
今回は、簡単なコマンドがあるのでこれでやってみましょう。
設定する
まず今回、使うのは、LEDなのでLD2ですね。
これにはTimer2 TIM2がアサインされています。
左側のTimersからTIM2を選択し
ClockSouceをInternalClockにします。
次は、クロックの設定です。
Clock Configurationをクリックし、最後の周波数を42MHzにします。
次は、出力を1Hzにします。
1Hzとすることで1秒間に1回動くこととなります。
42MHzを1Hzにするために42000000で割る必要があります。
今回は、42000と1000で割ります。
(0が含まれるので-1かな??)
次にNVICを設定します。
NVICは割り込みの機能になります。
GlobalInterruptのチェックを入れます。
これで、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を選択します
Tim2を選択します。
これで割り込み機能付のタイマーが始動しました。
次は、LEDを点滅するプログラムです。
プログラム自身は
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin);
ですね。
では、起動させるには?
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
と入れます。
これに先ほどのLチカのプログラムを入れればLEDが割り込み毎に点滅するようになります。
あれ?
Mainのプログラムに何も入っていない。
そうです、これは、1秒間に一回1Hz毎に割込みが動くのです。
割込みが入るとHAL_TIM_PeriodElapsedCallbackに飛びます。
ここで、LEDを点滅するプログラムを入れれば動作可能となります。
* 参考 [メモ] タイマー割り込みでLチカ (STM32L1-TIM2使用)
これを拡張すれば、いろいろな事が出来ますね
Author And Source
この問題について(STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (15) TimerでLチカしよう), 我々は、より多くの情報をここで見つけました https://qiita.com/usashirou/items/e02b798b4bf1b92a4546著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .