22-SysCheck-Library (STM32F4)

Mit dieser Library können die Systeme im STM32F4 getestet werden.

Im H-File kann per Define eingestellt werden welche Tests aktiv sein sollen.

Clock-Test :
Mit dieser Funktion kann geprüft werden ob die System-Clock-Quelle richtig eingestellt ist und ob alle Clock-Frequenzen stimmen (HCLK, PCLK1, PCLK2, SYSCLK).
(Bei meinen Projekten habe ich alle Clocks auf maximum eingestellt)

Assert-Mode :
In diesem Mode können Initialisierungsfehler während der Laufzeit erkannt werden. Wenn z.B. beim Init vom SPI-Clock der falsche BUS ausgewählt wurde. Oder wenn beim Init eines GPIO vergessen wurde den Speed-Parameter zu setzen.

Diese Fehler führen zu einem “Assert” der mit einer Funktion ausgewertet werden kann und zwar ob ein Fehler aufgetreten ist, und wenn ja in welchem Quellfile und in welcher Zeile vom Quellcode. Diese Angaben werden in einer Struktur gespeichert.

Hinweis : um diesen Mode zu aktivieren, muss im STM-File “cmsis_boot/stm32f4xx_conf.h” der Define “USE_FULL_ASSERT” auf 1 gesetzt werden (der ist standardmäßig deaktiviert)

Clock-Output :

Mit diesen Funktionen kann eine der Clock-Quellen auf einen GPIO-Pin gelegt werden.
z.B. um die Clock-Frq per Oszi zu prüfen oder um den Clock für andere externe Bauteil
zu benutzen.

Die GPIO-Pins können nicht verändert werden (sind von der CPU vorgegeben) aber
es kann eingestellt werden welche Clock-Source mit welchem Vorteiler benutzt werden soll.

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, RCC
Benutzte Librarys : keine

Enumerationen  :

1
2
3
4
5
6
7
8
9
typedef enum {
  SYSCHECK_OK =0, // keine Fehler
  CLKSOURCE_ERR,  // Clock-Source stimmt nicht
  HCLK_ERR,       // Frq von HCLK stimmt nicht
  PCLK1_ERR,      // Frq von PCLK1 stimmt nicht
  PCLK2_ERR,      // Frq von PCLK2 stimmt nicht
  SYSCLK_ERR,     // Frq von SYSCLK stimmt nicht
  ASSERT_ERR      // Assert Fehler
}SYSCHECK_t;

Funktionen  :

1
2
3
4
5
SYSCHECK_t UB_SysCheck_Clock(void);  // testet die Clock-Quelle und alle Frequenzen
void UB_SysCheck_Assert_Init(void);  // initialisiert den Assert-Mode
SYSCHECK_t UB_SysCheck_Assert(void); // testet ob ein Assert-Fehler aufgetreten ist
void UB_SysCheck_MCO1(MCO1_SOURCE source, MCO_PRESCALER prescaler); // clock an PA8 ausgeben
void UB_SysCheck_MCO2(MCO2_SOURCE source, MCO_PRESCALER prescaler); // Clock an PC9 ausgeben

Beispiel (Clock) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//--------------------------------------------------------------
// File     : main.c
// Datum    : 23.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der SysCheck-Library (Clock-Fehler)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_syscheck.h"
#include "stm32_ub_led.h"
 
int main(void)
{
  SYSCHECK_t check;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // LEDs initialisieren
  UB_Led_Init();
 
  // Clock Einstellungen prüfen
  check=UB_SysCheck_Clock();
 
  if(check==SYSCHECK_OK) {
    // keine Fehler
    UB_Led_On(LED_GREEN);
  }
  else {
    // Fehler im Systemclock
    UB_Led_On(LED_RED);
  }
 
  while(1)
  {
 
  }
}

Beispiel (Assert) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//--------------------------------------------------------------
// File     : main.c
// Datum    : 10.04.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der SysCheck-Library (Assert-Fehler)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_syscheck.h"
#include "stm32_ub_led.h"
 
int main(void)
{
  SYSCHECK_t check;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // LEDs initialisieren
  UB_Led_Init();
 
  // Assert-Mode initialisieren
  UB_SysCheck_Assert_Init();
 
  //------------------------------------------
  // Absichtlich einen Fehler provizieren
  //-----------------------------------------
  // SPI-Clock am falschen BUS initialisieren
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
 
  // Auf einen Assert-Fehler prüfen
  check=UB_SysCheck_Assert();
 
  if(check==SYSCHECK_OK) {
    // keine Fehler
    UB_Led_On(LED_GREEN);
  }
  else {
    // ein Assert Fehler ist aufgetreten
    // im Debug-Mode kann der Filename
    // und die Zeilennummer angezeigt werden
    UB_Led_On(LED_RED);
  }
 
  while(1)
  {
 
  }
}

Beispiel (Clock-Output) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//--------------------------------------------------------------
// File     : main.c
// Datum    : 01.01.2014
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der SysCheck-Library (Sysclock an PC9)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_syscheck.h"
 
int main(void)
{
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // Sysclock an PC9 ausgeben
  // Vorteiler=1 -> 168 MHz
  UB_SysCheck_MCO2(MCO2_SYSCLOCK, MCO_DIV1);
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_syscheck_v102

Hier der komplette CooCox-Projektordner zum Download :

Demo_22_Syscheck

Demo_22b_Syscheck2

Demo_22c_Syscheck3


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.