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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren