Forum: Mikrocontroller und Digitale Elektronik STM32F4 - PWM Input capture


von Hecot (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.