STM32F4 - PWM Input capture

Gast #4687756
Lesenswert?
• ▲
▼
Ich habe ein STM32F407-Disc1 board und versuche dort mit den HAL 
Funktionen einen PWM - InputCapture zu realisieren. Es gibt ein Beispiel 
von STM mit der StdPerf-lib, das ist quasi als Vorlage genommen habe.

Eigentlich sollten in CCR1 und CCR2 die Daten abgelegt werden, aber bei 
mir funktioniert nur das CCR1 Register, das CCR2 bleibt immer 0! 
Ansonsten geht alles - Interrupt und auch die Werte stimmen, nur kein 
CCR2!

Hier mein Code (die interessanten Stellen):

[code]

void Configure_GPIO_Inputs(void)
{
    /* Set variables used */
    GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __GPIOA_CLK_ENABLE();

  /* Configure PD0 as input capture for CP contact detection */
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* Enable Interrupt handler */
    HAL_NVIC_SetPriority(TIM2_IRQn,0,0);
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
}

void Configure_TIM2(void)
{
  __TIM2_CLK_ENABLE();

  TIM_HandleTypeDef htim2;
  TIM_IC_InitTypeDef itim2;
  TIM_SlaveConfigTypeDef stim2;
  TIM_MasterConfigTypeDef mtim2;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = PrescalerValue;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.Period = 0xFFFFFF; // 16-bit limit
  htim2.Init.RepetitionCounter = 0;

  itim2.ICFilter = 0x0;
  itim2.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  itim2.ICPrescaler = TIM_ICPSC_DIV1;
  itim2.ICSelection = TIM_ICSELECTION_DIRECTTI;

  HAL_TIM_IC_ConfigChannel(&htim2,&itim2,TIM_CHANNEL_1);

  stim2.SlaveMode = TIM_SLAVEMODE_RESET;
  stim2.InputTrigger = TIM_TS_TI1FP1;
  HAL_TIM_SlaveConfigSynchronization(&htim2, &stim2);

  mtim2.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim2, &mtim2);

  HAL_TIM_IC_Init(&htim2);
  HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_1);
  HAL_TIM_IC_Start(&htim2, TIM_CHANNEL_2);

  __HAL_TIM_ENABLE(&htim2);

  __HAL_TIM_ENABLE_IT(&htim2, TIM_IT_CC1);
}

Wie mir scheint, funktioniert der MasterSlave Mode nicht richtig?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.