2021年1月29日金曜日

STM32CubeIDE: General-purpose Timerを使う

STM32F446REには汎用的なGeneral-purpose Timerが8個搭載されています。PWM、入力キャプチャ、出力コンペアなど機能がいろいろありますが、Basic Timerと同じように単に割り込みを発生させるタイマーとして使ってみます。

General-purpose Timerの諸機能については
  • STM32シリーズ タイマ概要 AN4013
  • トランジスタ技術 2020年 3月号 別冊付録1 STM32F Armマイコン・プログラミング・ガイドブック
が参考になると思います。

STM32CubeIDE: Version 1.5.1
Target board: Nucleo-F446RE

MXの設定

Timers
  Mode
    Clock Source: Internal Clock
  Configuration
    Parameter Settings
      Counter Settings
        Prescaler: 8400-1
        Counter Period: 1000-1
    NVIC Settings
        TIM global interrupt: Enabled: ✓

Clock Sourceでクロック源に内蔵クロックを割り当てます。

Prescalerに8400、Counter Periodに1000を設定します(STM32Fの仕様上-1する)。BoardにNucleo-F446REを指定して初期化するとクロックは84MHzに設定されるので84MHz / (8400 * 1000) = 10Hzとなり、100msごとにタイマ割り込みが発生します。

NVIC SettingsでTIM2の割り込みを有効化します。

main.cにコードを追加


  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

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

General Purpose Timerをタイマ割り込みで使う場合、前回のBasic Timerと異なるのはClock Sourceを設定する必要がある点だけです。

LD2の出力波形


実行するとボード上のLED(LD2)が200ms(High:100ms+Low:100ms)周期で点滅します。

オシロで観測
 

0 件のコメント:

コメントを投稿