STM32 Timer im gatemodus

Gast #5654924
Lesenswert?
• ▲
▼
Hallo,
ich möchte zwei Timer im "gated-mode" betreiben. TIM4 soll nur eine PWM 
ausgeben, wenn die Pulse der TIM2-PWM high sind. TIM4 ist hierbei der 
Slave von TIM2. Getriggert werden soll dieser über den ITR1. Leider 
komme ich überhaupt nicht weiter. Im Moment laufen einfach beide PWMs. 
Erstellt wurde der Code im CubeMX. Genutzt wird der STM32F767.
Vielleicht kann mir jemand einen Tipp geben woran das liegen könnte?

Viele Grüße und vielen Dank schonmal.
1
static void MX_TIM2_Init(void)
2
{
3

4
  TIM_ClockConfigTypeDef sClockSourceConfig;
5
  TIM_MasterConfigTypeDef sMasterConfig;
6
  TIM_OC_InitTypeDef sConfigOC;
7

8
  htim2.Instance = TIM2;
9
  htim2.Init.Prescaler = 4999;
10
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
11
  htim2.Init.Period = 99;
12
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
13
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
14
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
15
  {
16
    _Error_Handler(__FILE__, __LINE__);
17
  }
18

19
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
20
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
21
  {
22
    _Error_Handler(__FILE__, __LINE__);
23
  }
24

25
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
26
  {
27
    _Error_Handler(__FILE__, __LINE__);
28
  }
29

30
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
31
  sConfigOC.Pulse = 3;
32
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
33
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
34
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
35
  {
36
    _Error_Handler(__FILE__, __LINE__);
37
  }
38

39
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE;
40
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
41
    if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
42
    {
43
      _Error_Handler(__FILE__, __LINE__);
44
    }
45

46
  HAL_TIM_MspPostInit(&htim2);
47

48
}
49

50
static void MX_TIM4_Init(void)
51
{
52

53
  TIM_ClockConfigTypeDef sClockSourceConfig;
54
  TIM_SlaveConfigTypeDef sSlaveConfig;
55
  TIM_MasterConfigTypeDef sMasterConfig;
56
  TIM_OC_InitTypeDef sConfigOC;
57

58
  htim4.Instance = TIM4;
59
  htim4.Init.Prescaler = 179;
60
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
61
  htim4.Init.Period = 99;
62
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
63
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
64
  if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
65
  {
66
    _Error_Handler(__FILE__, __LINE__);
67
  }
68

69
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
70
  if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
71
  {
72
    _Error_Handler(__FILE__, __LINE__);
73
  }
74

75
  if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
76
  {
77
    _Error_Handler(__FILE__, __LINE__);
78
  }
79

80

81
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
82
  sConfigOC.Pulse = 0;
83
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
84
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
85
  if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
86
  {
87
    _Error_Handler(__FILE__, __LINE__);
88
  }
89

90

91
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_GATED;
92
  sSlaveConfig.InputTrigger = TIM_TS_ITR1;
93
  if (HAL_TIM_SlaveConfigSynchronization(&htim4, &sSlaveConfig) != HAL_OK)
94
  {
95
    _Error_Handler(__FILE__, __LINE__);
96
  }
97

98
  HAL_TIM_MspPostInit(&htim4);
99

100
}
101

102
main:
103

104
htim2.Instance->CCR3 = 50;
105
htim4.Instance->CCR4 = 50;
106

107
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
108
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
Gast #5655077
Lesenswert?
• ▲
▼
Gut. Es erzeugt Code für SW4STM32.
In die main.c muss noch:
1
  /* USER CODE BEGIN 2 */
2
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
3
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
4

5
  /* USER CODE END 2 */

Dann wird an PA8 der PWM T1 Puls und an PA0 die PWM Pulsfolge von T2 
ausgegeben.
Angehängte Dateien:

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.