STM32 Timer in Slave Mode

OP #6420463
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);

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