STM32F429 Anfängerfragen

Gast #3406588
Lesenswert?
• ▲
▼
Hallo,

ich steige gerade in die Welt der Cortex-M4 ein und habe mir dazu das 
Discovery Kit mit dem STM32F429ZI geholt. Als IDE habe ich mir jetzt für 
den Anfang den Keil uVision5 geholt. Nun bin ich dabei mir ein paar 
Beispielprogramme anzuschauen. Nur hänge ich an folgendem Code für die 
Geschwindigkeit des Systick.
1
  SystemCoreClockUpdate();                      /* Get Core Clock Frequency   */
2
  if (SysTick_Config(SystemCoreClock / 1000)) { /* SysTick 1 msec interrupts  */
3
    while (1);                                  /* Capture error              */
4
  }

Get Core Clock ist mir klar und auch SysTick 1 msec habe ich mir 
angeschaut und verstanden, nur die while(1) ist mir unklar. Die Funktion 
SysTick_Config gibt bei Erfolg eine 0 und bei einem Fehler eine 1 
zurück. Wenn das Einstellen nun schief geht springt er in die 
Whileschleife aber wie kommt er da wieder raus ? Es kann doch nicht 
sein, dass bei einem Fehler der uC sich aufängt und einen Hardwarereset 
braucht ?

Gruß Michael
Gast #3406918
Lesenswert?
• ▲
▼
Ok, vielen dank für die Infos.
Hab mir jetzt ein kleines Programm gebastelt, dass einfasch nur einen 
Pin auf 1 setzen soll. Das Programm funktioniert nur wenn ich in 
uVision5 in dem Debug mode bin und dort auf Run klicke. Wenn ich nicht 
im Debugmode bin und das Programm auf den uC lade tut sich an dem Pin 
nichts...Ich weis es ist nicht leicht mit so wenig angaben eine guten 
Rat zu geben, aber vielleicht hatte jemand schonmal ein ähnliches 
Problem.
1
#include <stdio.h>
2
#include "STM32F4xx.h"
3
#include "GPIO_STM32F4xx.h"
4

5
volatile uint32_t msTicks;                      /* counts 1ms timeTicks       */
6

7
/*----------------------------------------------------------------------------
8
  SysTick_Handler
9
 *----------------------------------------------------------------------------*/
10
void SysTick_Handler(void) {
11
  msTicks++;
12
}
13

14
/*----------------------------------------------------------------------------
15
  delays number of tick Systicks (happens every 1 ms)
16
 *----------------------------------------------------------------------------*/
17
void Delay (uint32_t dlyTicks) {                                              
18
  uint32_t curTicks;
19

20
  curTicks = msTicks;
21
  while ((msTicks - curTicks) < dlyTicks);
22
}
23

24

25
/*----------------------------------------------------------------------------
26
  Main function
27
 *----------------------------------------------------------------------------*/
28
int main (void) {
29

30
  SystemCoreClockUpdate();                      /* Get Core Clock Frequency   */
31
  if (SysTick_Config(SystemCoreClock / 1000)) { /* SysTick 1 msec interrupts  */
32
    //while (1);                                  /* Capture error              */
33
  }
34
    GPIO_PortClock   (GPIOD, true);
35
    GPIO_PinWrite    (GPIOD, 12, 0);
36
    GPIO_PinConfigure(GPIOD, 12,
37
                      GPIO_MODE_OUTPUT,
38
                      GPIO_OUTPUT_PUSH_PULL,
39
                      GPIO_OUTPUT_SPEED_50MHz,
40
                      GPIO_PULL_DOWN);
41
  
42
  while(1) {
43
    GPIO_PinWrite(GPIOD, 12, 1);
44
    Delay(2000);
45
    GPIO_PinWrite(GPIOD, 12, 0);
46
    Delay(2000);
47
    GPIO_PinWrite(GPIOD, 12, 1);
48
    Delay(2000);
49
    GPIO_PinWrite(GPIOD, 12, 0);
50
    Delay(2000);
51
  }
52
}
#3410325
Lesenswert?
• ▲
▼
Ich hatte  ein Beispielprogramm, da wurde nach Initialisierung des 
Systick wurde alle 1 ms eine Funktion (siehe BSP_Background() 
)aufgerufen.


/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
 // OS_TimeMS ++;

  BSP_Background();

}
#3410626
Lesenswert?
• ▲
▼
Michael Bauer schrieb:
> Die Funktion
> SysTick_Config gibt bei Erfolg eine 0 und bei einem Fehler eine 1
> zurück.

1 or 0 == true or false?

Meiner Meinung nach ist es eine Unsitte aus Lochkartenzeiten,
logische Werte beim Programmieren  mit 0 oder 1 zu bezeichnen.
Ich nutze nur noch true oder false, da kann der Compiler tun, was er 
will.



Ich denke mir das Programm soll, wenn der SysTick richtig konfiguriert 
ist,
in einer Endlosschleife laufen, die nichts macht, sonst soll das 
Programm sich beenden.


Durch einen Interrupt das SysTick wird  der   SysTick_Handler
aufgerufen. Dort kann die Funktion aufgerufen werden, die jede 1 ms 
ausgeführt werden soll.

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.