Hallo, Ich habe diese Anleitung befolgt und das BlinkLED Beispiel "eingetippt". http://www.mikrocontroller.net/articles/STM32_CooCox_Installation In dem beispiel gibt es eine while Schleife die 1000000 mal durchlaufen wird. Das Beispiel läuft, aber die Blinkzeit kommt mir relativ relativ lang vor für einen Prozessor der angeblich mit 168MHz laufen sollte. Mit welcher Frequenz läuft der Prozessor da eigentlich? Ich sehe keinen Funktionsaufruf zum Taktsetzen in main(). Gruß Helmut // Demo Blink-LED für STM32F4xx mit einem STM32F4DISCOVERY Board // (c) 2013, Markus Müller // Dieser Code darf frei verwendet, modifiziert und kopiert werden. #include "stm32f4xx.h" // Deklaration der Peripheriefunktionen void Delay(long i); // Haupt-Programmschleife int main(void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Clock für Port D aktivieren GPIOD->MODER = 0x55000000; // Pin 12..15 als Ausgang deklarieren while(1) // Endlos SChleife { GPIOD->BSRRH = 0xF000; // Alle LED's aus Delay(1000000); GPIOD->BSRRL = 0x1000; // LED 1 ein Delay(1000000); GPIOD->BSRRL = 0x2000; // LED 2 ein Delay(1000000); GPIOD->BSRRL = 0x4000; // LED 3 ein Delay(1000000); GPIOD->BSRRL = 0x8000; // LED 4 ein Delay(1000000); } } // Delay für Verzögerungen void Delay(long i) { volatile long iZ = i; while (iZ--); }
Hallo Helmut, schaue doch mal in deine eingebundene Header-Datei (stm34f0xx.h). Dort stehen diverse Taktdefinitionen: HSE_VALUE und HSI_VALUE. Dann musst du dir noch die system_stm34f0xx.c reinziehen, dort gibt es eine SystemInit(). Mit der Funktion wird auch dein Takt erstmalig eingestellt. Beste Grüße public
Hallo public, danke. Ich wedre das heute Abend mal probieren und mich wieder melden. Gruß Helmut
Helmut S. schrieb: > wird. Das Beispiel läuft, aber die Blinkzeit kommt mir relativ relativ > lang vor für einen Prozessor der angeblich mit 168MHz laufen sollte. Der Prozessor startet mit dem eingebauten HSI (High Speed Internal) 8 MHz Oszillator. Die Frequenz setzt Du über das RCC Modul, meist indem man den externen Quarz einschaltet, auswählt und die Quarzfrequenz passend vorteilt und dann vervielfacht. Da Du nur "stm32f4xx.h" inkludierst, musst Du das von Hand machen. IDEs und RTose mache das meist fuer Dich und verstecken vor Dir.
Nein, das Demo initialisiert keine Clock's, somit läuft die CPU mit 16MHz mit dem internen RC-Oszilator (= HSI). Um die 168MHz zu erreichen muss man noch diese Funktion aufrufen: SystemInit(); Das ist eine Funktion aus der ST-Lib und die macht dann alles. - HSE aktivieen - PLL aktivieren - usw. In der Datei "system_stm32f4xx.c" muss dazu noch die Variable "PLL_M" entsprechend auf die Quarzfrequenz angepasst werden, dann sollte das schon tun. (25 für 25MHz Quarz ist voreingestellt) @Uwe, der STM32F4xx hat einen 16MHz HSI.
:
Bearbeitet durch User
Hallo und danke an alle Helfer, "Lola rennt". :-) Ich habe jetzt PLL_M auf 8 gesetzt (8MHz Quarz) und SystemInit() aufgerufen. Die 1000000 Leerschleifen mit "while (iZ--);" dauern jetzt noch ca. 1/10 der Zeit (41ms). Das ergibt jetzt ca. 41ns pro Durchlauf. Damit wäre die erste Hürde genommen. Gruß Helmut
Ich habe das nun hier mit aufgenommen: http://www.mikrocontroller.net/articles/STM32_CooCox_Installation#Clock_auf_168MHz_einstellen Vielleicht kannst Du ja hier weiter schreiben, was und wie Du als nächstes lernst?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.