STM32 BlinkLED, Prozessorferquenz STM32F4DISCOVERY

OP #3491887
Lesenswert?
• ▲
▼
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--);
}
Gast #3491932
Lesenswert?
• ▲
▼
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
Gast #3492038
Lesenswert?
• ▲
▼
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.
(Firma: EleLa - www.elela.de) #3492045
Lesenswert?
• ▲
▼
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.
OP #3493023
Lesenswert?
• ▲
▼
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

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.