2

私は SW4STM32 ツールチェーンを使用しています。オーバーフロー時に timer2 を使用して LED を点滅させたいのですが、STM32103RET で、LED をオンまたはオフにする関数を次に示します。

void TurnOnLed(){
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
}

void TurnOffLed()
{
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET);
}

timer2 の初期化は stm32 キューブ mx によって設定されていますが、timer2 がオーバーフローしたときにどの関数が呼び出されるかわかりませんか?

4

2 に答える 2

7

関数ごとにタイマーを開始する必要があります

HAL_TIM_Base_Start_IT(&htimX);

そして、最初に次の名前のコールバック関数を実装しますHAL_TIM_PeriodElapsedCallback

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIMx) {
    }
}

HAL_Driver について何も知らない場合は、以下から多くの情報を見つけることができます。

  1. STM32F0xx HAL_Driver の説明または別のファミリについてはHAL Driver、st.comで検索してください
  2. HAL Driverの使用例を見ることができます(CubeMXを使用しているため、C:/Users/%USERNAME%/STM32Cube/Repository/ディレクトリで見つけることができます)
  3. 開いstm32f?xx_hal_tim.cて、どの機能が存在するかを確認し、コメントを見て、彼らが何をしているかを理解してください。HAL_TIM_IRQHandlerまた、コールバックの名前がどのように付けられているかを知るために、どの関数が呼び出されるかを確認してください。
于 2016-07-01T09:13:50.697 に答える
3

まず、タイマーを構成する必要があります。

/* TIM2 init function */
static void MX_TIM2_Init(void)
{

  TIM_SlaveConfigTypeDef sSlaveConfig;
  TIM_MasterConfigTypeDef sMasterConfig;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 10000;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 1000;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }

  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
  sSlaveConfig.InputTrigger = TIM_TS_ITR0;
  if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != HAL_OK)
  {
    Error_Handler();
  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }

  }

次に、この関数を使用して割り込みを処理します。

void TIM2_IRQHandler(void)
{
    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
     __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE);            //clear interrupt flag
    //HAL_Delay(500);
}

main() 関数で割り込みを有効にすることを忘れないでください。

HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);
  HAL_NVIC_EnableIRQ(TIM2_IRQn);// Enable interrupt from TIM3 (NVIC level)
于 2016-10-13T15:54:21.340 に答える