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 :
Hier der komplette CooCox-Projektordner zum Download :