Forum: Mikrocontroller und Digitale Elektronik STM32 Timer in Slave Mode


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich möchte auf einem STM32F4 den Timer1 mit dem Timer2 synchronisieren, 
daher denke ich, ist der Slave Mode für Timer1 die richtige Wahl. Nun 
habe ich das ganze versucht zu konfigurieren, jedoch scheint Timer1 
nicht anzuspringen. Die CLK etc. ist freigeschaltet (Habe es mit CubeMX 
konfiguriert und noch im MSP überprüft). Gestartet habe ich nur Timer2 
mit HAL_TIM_PWM_Start(...), aber auch wenn ich Timer1 mit 
HAL_TIM_OC_Start(...) starte, passiert nichts. Jemand eine Idee, was ich 
falsch eingestellt habe?

Einstellungen Timer1:
1
  TIM_SlaveConfigTypeDef sSlaveConfig = {0};
2
  TIM_MasterConfigTypeDef sMasterConfig = {0};
3
  TIM_OC_InitTypeDef sConfigOC = {0};
4
5
  /* USER CODE BEGIN TIM1_Init 1 */
6
7
  /* USER CODE END TIM1_Init 1 */
8
  htim1.Instance = TIM1;
9
  htim1.Init.Prescaler = 0;
10
  htim1.Init.CounterMode = TIM_COUNTERMODE_Up;
11
  htim1.Init.Period = 5000;
12
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
13
  htim1.Init.RepetitionCounter = 0;
14
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
15
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
16
  {
17
  Error_Handler();
18
  }
19
  if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
20
  {
21
  Error_Handler();
22
  }
23
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
24
  sSlaveConfig.InputTrigger = TIM_TS_ITR2;
25
  if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK)
26
  {
27
  Error_Handler();
28
  }
29
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
30
  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
31
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
32
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
33
  {
34
  Error_Handler();
35
  }
36
  sConfigOC.OCMode = TIM_OCMODE_TIMING;
37
  sConfigOC.Pulse = 0;
38
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
39
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
40
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
41
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
42
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
43
  if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
44
  {
45
  Error_Handler();
46
  }

Einstelleungen Timer2:
1
  TIM_MasterConfigTypeDef sMasterConfig = {0};
2
  TIM_OC_InitTypeDef sConfigOC = {0};
3
4
  /* USER CODE BEGIN TIM2_Init 1 */
5
6
  /* USER CODE END TIM2_Init 1 */
7
  htim2.Instance = TIM2;
8
  htim2.Init.Prescaler = 0;
9
  htim2.Init.CounterMode = TIM_COUNTERMODE_Up;
10
  htim2.Init.Period = 5000;
11
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
12
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
13
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
14
  {
15
  Error_Handler();
16
  }
17
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE;
18
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
19
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
20
  {
21
  Error_Handler();
22
  }
23
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
24
  sConfigOC.Pulse = 0;
25
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
26
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
27
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
28
  {
29
  Error_Handler();
30
  }
31
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
32
  {
33
  Error_Handler();
34
  }
35
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
36
  {
37
  Error_Handler();
38
  }
39
  /* USER CODE BEGIN TIM2_Init 2 */
40
41
  /* USER CODE END TIM2_Init 2 */
42
  HAL_TIM_MspPostInit(&htim2);

von Bert S. (kautschuck)


Angehängte Dateien:

Lesenswert?

Zumindest habe ich schon einmal gesehen, dass die Trigger Source falsch 
war, aber es geht leider immer noch nicht.

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.