mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F4 - PWM Input capture


Autor: Hecot (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.