STM32 Timer Callback wird nicht aufgerufen?

Gast #4332570
Hallo,
so langsam beginne ich zu verzweifeln. Nirgendswo eine vernünftige Doku 
die alles umfasst und oder die Infos verteilen sich auf 3-4 PDFs, 
Anleitungen im Netz sind unauffindbar oder veraltet. Und ein Buch habe 
ich auch noch nicht gefunden.

Habe bereits hier zum IRQHandler fragen gestellt:


Jetzt wollte ich es über die Callback-Funktion machen doch es geht 
einfach nicht!?

Großteil wurde von CubeMX automatisch erstellt.
1
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
2
{
3

4
  if(htim_base->Instance==TIM2)
5
  {
6
  /* USER CODE BEGIN TIM2_MspInit 0 */
7

8
  /* USER CODE END TIM2_MspInit 0 */
9
    /* Peripheral clock enable */
10
    __TIM2_CLK_ENABLE();
11
  /* USER CODE BEGIN TIM2_MspInit 1 */
12

13
  /* USER CODE END TIM2_MspInit 1 */
14
  }
15

16
}
1
void MX_TIM2_Init(void)
2
{
3

4
  TIM_ClockConfigTypeDef sClockSourceConfig;
5
  TIM_MasterConfigTypeDef sMasterConfig;
6

7
  htim2.Instance = TIM2;
8
  htim2.Init.Prescaler = 64;
9
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
10
  htim2.Init.Period = 328125;
11
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
12
  HAL_TIM_Base_Init(&htim2);
13

14
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
15
  HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
16

17
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
18
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
19
  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
20

21
  //TIM_Cmd(TIM2, ENABLE);
22
  HAL_TIM_Base_Start_IT(&htim2);
23

24
}
1
void HAL_TIM_PeriodElapsedCallback  (TIM_HandleTypeDef *  htim)
2
{
3
  if(htim->Instance == TIM2)
4
  {
5
    usr_toggle_led = 1;
6
    //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
7
    //HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
8
  }
9
}
1
int main(void)
2
{
3

4
   HAL_Init();
5

6
  /* Configure the system clock */
7
  SystemClock_Config();
8

9
  /* Initialize all configured peripherals */
10
  MX_TIM2_Init();
11

12
  /* Infinite loop */
13
  /* USER CODE BEGIN WHILE */
14
  while (1)
15
  {
16
    //HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
17
    /* USER CODE END WHILE */
18
    if(usr_toggle_led != 0)
19
    {
20
      HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
21
      usr_toggle_led = 0;
22
    }
23

24
    /* USER CODE BEGIN 3 */
25

26
  }
27
  /* USER CODE END 3 */
28

29
}

Warum toggelt mein LED nicht? :(
Vielen lieben dank.
MfG.
Gast #4332584
Zum NVIC:
1
void HAL_MspInit(void)
2
{
3
  /* USER CODE BEGIN MspInit 0 */
4

5
  /* USER CODE END MspInit 0 */
6

7
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
8

9
  /* System interrupt init*/
10
  /* SysTick_IRQn interrupt configuration */
11
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
12

13
  /* USER CODE BEGIN MspInit 1 */
14

15
  /* USER CODE END MspInit 1 */
16
}

Zum GPIO gibt's noch(wurde oben raus editiert):
1
void MX_GPIO_Init(void)
2
{
3

4
  GPIO_InitTypeDef GPIO_InitStruct;
5

6
  /* GPIO Ports Clock Enable */
7
  __GPIOC_CLK_ENABLE();
8
  __GPIOH_CLK_ENABLE();
9
  __GPIOA_CLK_ENABLE();
10
  __GPIOB_CLK_ENABLE();
11

12
  /*Configure GPIO pin : PC13 */
13
  GPIO_InitStruct.Pin = GPIO_PIN_13;
14
  GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
15
  GPIO_InitStruct.Pull = GPIO_NOPULL;
16
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
17

18
  /*Configure GPIO pins : PC0 PC1 PC2 PC3 
19
                           PC10 PC12 */
20
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3 
21
                          |GPIO_PIN_10|GPIO_PIN_12;
22
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
23
  GPIO_InitStruct.Pull = GPIO_PULLUP;
24
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
25
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
26

27
  /*Configure GPIO pins : PA0 PA1 PA5 */
28
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5;
29
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
30
  GPIO_InitStruct.Pull = GPIO_NOPULL;
31
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
32
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
33

34
  /*Configure GPIO pins : PA2 PA3 */
35
  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
36
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
37
  GPIO_InitStruct.Pull = GPIO_NOPULL;
38
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
39
  GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
40
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
41

42
  /*Configure GPIO pin : PB4 */
43
  GPIO_InitStruct.Pin = GPIO_PIN_4;
44
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
45
  GPIO_InitStruct.Pull = GPIO_PULLUP;
46
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
47
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
48

49
  /*Configure GPIO pins : PB5 PB6 PB7 */
50
  GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
51
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
52
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
53
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
54
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
55

56
}

MfG.
Gast #4332618
Guten Tag

@ Matthias Sch.

VIELEN DANK! es haben tatsächlich zwei Zeilen zum NVIC gefehlt...
1
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
2
    HAL_NVIC_EnableIRQ(TIM2_IRQn);

Nun geht es.

Ich behaupte jetzt einfach mal die Doku ist nicht sehr gut :(

MfG.
Gast #4332633
Moiiin Rudii ;-)

Ich habe schon öfter gesehen das für Interrupts das Enable bzw. die Prio 
fehlt.

Mein Tip:
wenn mit CubeMX gearbeitet wird, dann wirklich auch unter Configuration 
alles noch einmal durchsehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.