2016-06-29 43 views
2

私はSW4STM32ツールチェーンを使用していますが、STM32103RETでオーバーフロー時にtimer2を使用してLEDを点滅させたい、 はここで機能するようになっています。sw4stm32で割り込み機能を有効にするには

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

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

タイマー2のinitilizingは、STM32キューブMXによって設定されているが、私は、タイマ2がオーバーフローしたときに呼び出された関数が分からないのですか?あなたはHAL_Driverについて何も知らない場合は、あなたが見つけて

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

:あなたは機能

HAL_TIM_Base_Start_IT(&htimX); 

そしてもみ時間HAL_TIM_PeriodElapsedCallbackという名前あなたのコールバック関数を実装することで、あなたのタイマーを起動する必要があり

答えて

4

から多くの情報:

  1. STM32F0xx HAL_Driver descriptionまたは別の家族ただst.com
  2. HAL Driverを検索あなたは(あなたがCubeMXを使用すると、あなたがC:/Users/%USERNAME%/STM32Cube/Repository/ディレクトリにそれを見つけたことができますので、)HALドライバの使用例を参照してください
  3. ただ、オープンstm32f?xx_hal_tim.cと彼らのコメントを参照して、関数が存在しているかを見ることができますティーが何をしているのかを理解する。 HAL_TIM_IRQHandlerから呼び出される関数がどのように名前付きコールバックであるかを知ることができます。
2

まず、あなたがあなたのタイマーを設定する必要があります。

/* 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) 
関連する問題