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 件のコメント:
コメントを投稿