Forum: Mikrocontroller und Digitale Elektronik STM32F469 kein Systick -> Bootloader


von Reinerzufall24 (Gast)


Lesenswert?

Hallo,

ich habe es irgendwie hinbekommen das mein STM32F469IIT nicht mehr 
läuft.
Das heißt genau dass der Systick nicht läuft/zählt und demnach auch das 
Programm nichts tut - ganz so als ob ein Breakpoint aktiviert wäre.

Wie ich an verschienden Quellen gelesen habe, kann man das mit dem 
Bootloader wieder lösen. Das Aktivieren über die BootPins sollte ich 
hinbekommen.
Die Frage ist aber was ich dann für die Programm aufspielen soll?

Leider fehlen mir da ein paar Infos zum Verständnis:
Was macht man da genau? - Mein Programm schreibe ich doch eigentlich in 
den Flash des Controller..?
Ich nutze als IDE übrigens STM32CubeIDE mit einem ST/Link V2.

Ich bitte um ein paar Hinweise.
Vielen Dank im Voraus!

ReinerZufall24

von Franz M. (elmo64)


Lesenswert?

Reinerzufall24 schrieb:
> Das heißt genau dass der Systick nicht läuft/zählt und demnach auch das
> Programm nichts tut - ganz so als ob ein Breakpoint aktiviert wäre.

Ist die PLL richtig konfiguriert?
Woran bemerkst du, dass der "systick" nicht läuft und der uC nicht (in 
einem Fehlerzustand) hängt? Falls der systick Timer gemeint ist, ist 
dieser initialisiert? Wenn ich mich richtig erinnere, war dieser in 
manchen Manuals von ST nur rudimentär beschrieben.

: Bearbeitet durch User
von L.C.D. (Gast)


Lesenswert?

Einfach ein "Mass Erase" fuer den Flash.
Dann laueft zwar der Systick erst recht nicht, aber das ist
ja dann Teil des Plans.

von Reinerzufall24 (Gast)



Lesenswert?

Bezügl. der PLL und Programm habe ich ein neues Projekt angelegt und 
alles auf den Std.Werten gelassen.
Das hat eigentlich immer geklappt.
Da ist kein Bus oder GPIO konfiguriert (außer den Std.Sachen).

Hier ein Bild zur Clockeinstellung.

Ja, mit SysdTick meine ich den Current-Wert . (siehe Bild)
Bei den Fehlerzuständen bin ich mir nun (nachdem ich wie gestern Abend 
noch bisl gelesen habe) nicht mehr sicher.
Ich hatte da in den Registern MMFAR geschaut ... das zeigt aber keinen 
Fehler an und ist vermultich auch nicht die richtige Stelle.
Das HFSR (HardFaultRegister) gibt auch eine  0 zurück -> nach meinem 
jetzigen Kenntnisstand ist das i.o..

Wie kann ich rausfinden was da Sache ist?
Hab nun schon das zweite Board in diesen misslichen Zustand gebracht.
Es ging genau 1x zu beschreiben. Bei zweiten Mal hängt es dann :-()

Vielen Dank für eure Hilfe!

von Johannes S. (Gast)


Lesenswert?

Ist im Code das HAL_SYSTICK_Config() vorhanden? Und der 
SysTick_Handler(void) mit dem   HAL_IncTick()?

von ReinerZufall24 (Gast)


Lesenswert?

... Wird der SysTick nicht in der HAL_Init(); aufgerufen?
1
  HAL_InitTick(TICK_INT_PRIORITY);

und weiter
1
_weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
2
{
3
  /* Configure the SysTick to have interrupt in 1ms time basis*/
4
  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
5
  {
6
    return HAL_ERROR;
7
  }
8
9
  /* Configure the SysTick IRQ priority */
10
  if (TickPriority < (1UL << __NVIC_PRIO_BITS))
11
  {
12
    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
13
    uwTickPrio = TickPriority;
14
  }
15
  else
16
  {
17
    return HAL_ERROR;
18
  }
19
20
  /* Return function status */
21
  return HAL_OK;
22
}

Nur den handle finde ich derz. noch nicht.


Wie würdet ihr bei der Fehlersuche herangehen?
VG Reiner



Hier noch die Funktion SystemClock_Config:
1
/**
2
  * @brief System Clock Configuration
3
  * @retval None
4
  */
5
void SystemClock_Config(void)
6
{
7
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
8
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
9
10
  /** Configure the main internal regulator output voltage
11
  */
12
  __HAL_RCC_PWR_CLK_ENABLE();
13
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
14
  /** Initializes the RCC Oscillators according to the specified parameters
15
  * in the RCC_OscInitTypeDef structure.
16
  */
17
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
18
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
19
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
20
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
21
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
22
  RCC_OscInitStruct.PLL.PLLM = 16;
23
  RCC_OscInitStruct.PLL.PLLN = 192;
24
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
25
  RCC_OscInitStruct.PLL.PLLQ = 4;
26
  RCC_OscInitStruct.PLL.PLLR = 2;
27
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
28
  {
29
    Error_Handler();
30
  }
31
  /** Initializes the CPU, AHB and APB buses clocks
32
  */
33
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
34
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
35
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
36
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV4;
37
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
38
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
39
40
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
41
  {
42
    Error_Handler();
43
  }
44
}
45
46
/**
47
  * @brief GPIO Initialization Function
48
  * @param None
49
  * @retval None
50
  */

von ReinerZufall24 (Gast)


Lesenswert?

So ... ermal positive Nachrichten:
Es bzw. er läuft wieder.

Bisl Blöd ist zwar das ich nicht weiß was ich macht habe...
Zur Fehlersuche habe ich mir folgendes ausgeldacht:
Ich habe noch ein 469Disco-Board.
Da hätet ich auf beiden ein "leeres" default-Projekt in STM32CubeIDE 
angelegt und dann die Register einzeln verglichen und geschaut was da 
los ist.

Grundsätzlich denke ich, das Problem liegt irgendwo in meiner 
Debugeinstellung der CubeIDE.

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.