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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.