mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Input Capture stm32f4-discovery


Autor: Thomas Klaehn (tkl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade ein PWM Signal an PA2 auszuwerten. Ich benutze dazu 
timer 2. An PA2 liegt ein Rechecksignal mit f=50Hz an (hab' ich 
oszilloskopiert). Unten folgenden Code benutze ich, jedoch wird nie ein 
Timer 2 interrupt ausgelöst.
static GPIO_InitTypeDef port_cfg_a2 = {
    .Pin = GPIO_PIN_2,
    .Mode = GPIO_MODE_AF_PP,
    .Speed = GPIO_SPEED_FREQ_HIGH,
    .Pull = GPIO_PULLUP,
    .Alternate = GPIO_AF1_TIM2,

static TIM_HandleTypeDef timer_handle = {
    .Instance = TIM2,
    .Init.Prescaler = 0,
    .Init.CounterMode = TIM_COUNTERMODE_UP,
    .Init.Period = 0xffff,
    .Init.ClockDivision = TIM_CLOCKDIVISION_DIV1,
    .Init.RepetitionCounter = 0,
};

static TIM_IC_InitTypeDef input_capture_init = {
    .ICPrescaler = TIM_ICPSC_DIV1,
    .ICFilter = 0,
    .ICPolarity = TIM_ICPOLARITY_FALLING,
    .ICSelection = TIM_ICSELECTION_INDIRECTTI,
};

static TIM_SlaveConfigTypeDef   slave_config = {
    .SlaveMode = TIM_SLAVEMODE_RESET,
    .InputTrigger = TIM_TS_TI2FP2,
};

int main(void)
{
  __HAL_RCC_TIM2_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  HAL_GPIO_Init(GPIOA, port_cfg_a2);

  HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);

  HAL_TIM_IC_Init(&timer_handle);

  HAL_TIM_IC_ConfigChannel(&timer_handle, &input_capture_init, TIM_CHANNEL_1);
  input_capture_init.ICPolarity = TIM_ICPOLARITY_RISING;
  input_capture_init.ICSelection = TIM_ICSELECTION_DIRECTTI;
  HAL_TIM_IC_ConfigChannel(&timer_handle, &input_capture_init, TIM_CHANNEL_2);

  HAL_TIM_SlaveConfigSynchronization(&timer_handle, &slave_config);
  HAL_TIM_IC_Start_IT(&timer_handle, TIM_CHANNEL_1);
  HAL_TIM_IC_Start_IT(&timer_handle, TIM_CHANNEL_2);

  HAL_NVIC_EnableIRQ(TIM2_IRQn);

  while(1);
}

void TIM2_IRQHandler(void)
{
  TIM_HandleTypeDef *htim = &timer_handle;
  uint32_t tmpreg = 0U;

  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) !=RESET) {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);
      if((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) {
        tmpreg = htim->Instance->CCR1;
      }
    }
  }
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) !=RESET) {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);
      if((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) {
        tmpreg = htim->Instance->CCR2;
      }
    }
  }
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) !=RESET) {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);
      if((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) {
        tmpreg = htim->Instance->CCR3;
      }
    }
  }
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) !=RESET) {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);
      if((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) {
        tmpreg = htim->Instance->CCR4;
      }
    }
  }
}
Hat vllt. jemand eine Idee was ich hier falsch mache?

Danke & Gruß,
Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.