CCWO

挫けそうになるブログ #音楽 ##ライブ ##弾いてみた #programming ##Python ##C ##C++ ##VSCode ##Markdown ##TeX ##Git #電子工作 ##エフェクター ##PIC ##RX,RZ ##STM32 ##FPGA ##Raspberry Pi ##Ubuntu ##Fusion 360 #スポーツ ##筋トレ

STM32F303K8 タイマー割り込み 本番

開発環境

評価ボード Nucleo STM32F303K8
IDE System Workbench for STM32 (SW4STM32)
Library Hal Library
OS windows 10 pro

今度はちゃんとTIMを使ってタイマー割り込みをしたいと思います。

CubeMXの設定

f:id:CCWO:20170821171003p:plain
左のツリーのTIM1のClock Source: Internal Clockを選択します。

TIM1の設定

Configuration→TIM1→TIM1 Configuration→Parameter Settings
f:id:CCWO:20170821171105p:plain
Prescaler: 16
Counter Period: 49999
として、100msのタイマー割り込みとしました。10Hzです。(こういう計算を周波数領域でやれる人うらやましい・・・絶対時間領域じゃないと計算できない・・・)
また、TIM1のClock SourceがInternal Clockとなりこれは8MHzとなっています。
f:id:CCWO:20170821171353p:plain
TIM1はデータシートよりAPB2を参照しているみたいです。
ちなみにタイマーのクロックソースは
APB1: TIM2, 3, 4, 6, 7
APB2: TIM20, 17, 16, 15, 1
となっています。
この状態でgenerateします。

SW4STM32では

main.c

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

これでタイマーを動作させます。
stm32f3xx_it.c

void TIM1_UP_TIM16_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_UP_TIM16_IRQn 0 */

  /* USER CODE END TIM1_UP_TIM16_IRQn 0 */
  HAL_TIM_IRQHandler(&htim1);
  /* USER CODE BEGIN TIM1_UP_TIM16_IRQn 1 */
  HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
  /* USER CODE END TIM1_UP_TIM16_IRQn 1 */
}

タイマーはこちらの関数を呼びます。
これで100msのタイマー割り込みを動作させることができました。