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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren