{"id":243,"date":"2017-11-23T00:10:18","date_gmt":"2017-11-22T23:10:18","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=243"},"modified":"2023-03-04T23:58:23","modified_gmt":"2023-03-04T22:58:23","slug":"22-syscheck-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/22-syscheck-library-stm32f4\/","title":{"rendered":"22-SysCheck-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/21-adc_injected-group-library-stm32f4\/\" title=\"21-ADC_Injected-Group-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 21-ADC_Injected-Group-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/23-dac-library-stm32f4\/\" title=\"23-DAC-Library (STM32F4)\">23-DAC-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library k\u00f6nnen die Systeme im STM32F4 getestet werden.<\/p>\n<p>Im H-File kann per Define eingestellt werden welche Tests aktiv sein sollen.<\/p>\n<p><strong>Clock-Test :<\/strong><br \/>\nMit dieser Funktion kann gepr\u00fcft werden ob die System-Clock-Quelle richtig eingestellt ist und ob alle Clock-Frequenzen stimmen (HCLK, PCLK1, PCLK2, SYSCLK).<br \/>\n(Bei meinen Projekten habe ich alle Clocks auf maximum eingestellt)<\/p>\n<p><strong>Assert-Mode :<br \/>\n<\/strong>In diesem Mode k\u00f6nnen Initialisierungsfehler w\u00e4hrend der Laufzeit erkannt werden. Wenn z.B. beim Init vom SPI-Clock der falsche BUS ausgew\u00e4hlt wurde. Oder wenn beim Init eines GPIO vergessen wurde den Speed-Parameter zu setzen.<\/p>\n<p>Diese Fehler f\u00fchren zu einem \u201cAssert\u201d 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.<\/p>\n<p>Hinweis : um diesen Mode zu aktivieren, muss im STM-File \u201ccmsis_boot\/stm32f4xx_conf.h\u201d der Define \u201cUSE_FULL_ASSERT\u201d auf 1 gesetzt werden (der ist standardm\u00e4\u00dfig deaktiviert)<\/p>\n<p><strong>Clock-Output :<\/strong><\/p>\n<p>Mit diesen Funktionen kann eine der Clock-Quellen auf einen GPIO-Pin gelegt werden.<br \/>\nz.B. um die Clock-Frq per Oszi zu pr\u00fcfen oder um den Clock f\u00fcr andere externe Bauteil<br \/>\nzu benutzen.<\/p>\n<p>Die GPIO-Pins k\u00f6nnen nicht ver\u00e4ndert werden (sind von der CPU vorgegeben) aber<br \/>\nes kann eingestellt werden welche Clock-Source mit welchem Vorteiler benutzt werden soll.<\/p>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, RCC\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Enumerationen \u00a0:<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  SYSCHECK_OK =0, \/\/ keine Fehler\r\n  CLKSOURCE_ERR,  \/\/ Clock-Source stimmt nicht\r\n  HCLK_ERR,       \/\/ Frq von HCLK stimmt nicht\r\n  PCLK1_ERR,      \/\/ Frq von PCLK1 stimmt nicht\r\n  PCLK2_ERR,      \/\/ Frq von PCLK2 stimmt nicht\r\n  SYSCLK_ERR,     \/\/ Frq von SYSCLK stimmt nicht\r\n  ASSERT_ERR      \/\/ Assert Fehler\r\n}SYSCHECK_t;<\/pre>\n<p><strong>Funktionen \u00a0:<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">SYSCHECK_t UB_SysCheck_Clock(void);  \/\/ testet die Clock-Quelle und alle Frequenzen\r\nvoid UB_SysCheck_Assert_Init(void);  \/\/ initialisiert den Assert-Mode\r\nSYSCHECK_t UB_SysCheck_Assert(void); \/\/ testet ob ein Assert-Fehler aufgetreten ist\r\nvoid UB_SysCheck_MCO1(MCO1_SOURCE source, MCO_PRESCALER prescaler); \/\/ clock an PA8 ausgeben\r\nvoid UB_SysCheck_MCO2(MCO2_SOURCE source, MCO_PRESCALER prescaler); \/\/ Clock an PC9 ausgeben<\/pre>\n<p><strong>Beispiel (Clock) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 23.03.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der SysCheck-Library (Clock-Fehler)\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_syscheck.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nint main(void)\r\n{\r\n  SYSCHECK_t check;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ LEDs initialisieren\r\n  UB_Led_Init();\r\n\r\n  \/\/ Clock Einstellungen pr\u00fcfen\r\n  check=UB_SysCheck_Clock();\r\n\r\n  if(check==SYSCHECK_OK) {\r\n    \/\/ keine Fehler\r\n    UB_Led_On(LED_GREEN);\r\n  }\r\n  else {\r\n    \/\/ Fehler im Systemclock\r\n    UB_Led_On(LED_RED);\r\n  }\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p><strong>Beispiel (Assert) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 10.04.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der SysCheck-Library (Assert-Fehler)\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_syscheck.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nint main(void)\r\n{\r\n  SYSCHECK_t check;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ LEDs initialisieren\r\n  UB_Led_Init();\r\n\r\n  \/\/ Assert-Mode initialisieren\r\n  UB_SysCheck_Assert_Init();\r\n\r\n  \/\/------------------------------------------\r\n  \/\/ Absichtlich einen Fehler provizieren\r\n  \/\/-----------------------------------------\r\n  \/\/ SPI-Clock am falschen BUS initialisieren\r\n  RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);\r\n\r\n  \/\/ Auf einen Assert-Fehler pr\u00fcfen\r\n  check=UB_SysCheck_Assert();\r\n\r\n  if(check==SYSCHECK_OK) {\r\n    \/\/ keine Fehler\r\n    UB_Led_On(LED_GREEN);\r\n  }\r\n  else {\r\n    \/\/ ein Assert Fehler ist aufgetreten\r\n    \/\/ im Debug-Mode kann der Filename\r\n    \/\/ und die Zeilennummer angezeigt werden\r\n    UB_Led_On(LED_RED);\r\n  }\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p><strong>Beispiel (Clock-Output) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 01.01.2014\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der SysCheck-Library (Sysclock an PC9)\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_syscheck.h\"\r\n\r\nint main(void)\r\n{\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ Sysclock an PC9 ausgeben\r\n  \/\/ Vorteiler=1 -&gt; 168 MHz\r\n  UB_SysCheck_MCO2(MCO2_SYSCLOCK, MCO_DIV1);\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/01\/ub_stm32f4_syscheck_v102.zip\">ub_stm32f4_syscheck_v102<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/01\/Demo_22_Syscheck.zip\">Demo_22_Syscheck<\/a><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/01\/Demo_22b_Syscheck2.zip\">Demo_22b_Syscheck2<\/a><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/01\/Demo_22c_Syscheck3.zip\">Demo_22c_Syscheck3<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library k\u00f6nnen 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\u00fcft werden ob die System-Clock-Quelle richtig eingestellt ist und ob alle Clock-Frequenzen &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/22-syscheck-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":22,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[9,7,162],"class_list":["post-243","page","type-page","status-publish","hentry","category-stm32f4","tag-library","tag-stm32f4","tag-syscheck"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=243"}],"version-history":[{"count":5,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/243\/revisions"}],"predecessor-version":[{"id":3674,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/243\/revisions\/3674"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}