HAL_GPIO_TogglePin, benötigte Zeit für ein STM32F7.

Gast #7074786
Lesenswert?
• ▲
▼
Hallo,

ich habe folgenden Code, für ein STM32F746 Board.
Die LED toggelt dabei ca. alle 350ns (d.h. eine Frequenz von ca. 3MHz).

Ist das nicht zu langsam? Systemclock sollte 200MHz sein....
Gemäss ClockConfig sollte die Peripherie (APB) mindestens im Bereich 
50MHz oder höher laufen...??
1
while (1)
2
{
3
        //HAL_Delay(500);
4
      HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_8); //LED 101
5
}
#7074802
Lesenswert?
• ▲
▼
Schau mal, was die HAL_GPIO_TogglePin(...) so macht. Ich sehe da ein 
assert_param (kann aktiv sein oder nicht, je nach #define), ein 
Lesezugriff auf das Port-Register, eine Maskier-UND-ODER-Geschichte und 
ein Schreibzugriff auf das Port-Register.

Jetzt kann das entweder so lange dauern, dass nur 3MHz erreicht werden - 
oder aber (unwahrscheinlich, kann aber auch betrachtet werden) es ist 
wesentlich schneller als die 50MHz, die dein Portpin toggeln kann. Was 
passiert dann?
Gast #7074826
Lesenswert?
• ▲
▼
Cyblord -. schrieb:
> Einfach mal das GPIO Toggle Register direkt beschreiben. Dann ist der
> HAL Overhead schon mal raus.

die 3MHz oben ware noch mit ein paar If-Anweisungen in der while-loop, 
aber effektiv wie oben sind es ca. 138ns, d.h. ca. 7MHz....

d.h. das ist normal bei Verwendung der HAL ?

Auf 50Mhz komme ich in dem Fall nur mit Register direkt schreiben?

...d.h. diese HAL Toggle Funktion ist Faktor 7 langsamer als möglich... 
fällt mir schwer zu glauben...
Gast #7074830
Lesenswert?
• ▲
▼
Abgesehen von einigen Optimierungen: Der Zugriff auf die GPIO-Register 
ist leider schnarchlangsam. Die gehen über diverse Bus-Bridges usw., 
beim H7 wohl eher noch schlimmer. Die G0-er hängen die "Dickschiffe" in 
der Hinsicht ab, da dort die GPIO-Register über einen extra Bus direkt 
an der CPU hängen.
Über 20Mhz kommt man beim F7 wohl kaum, eher darunter ...

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.