Forum: Mikrocontroller und Digitale Elektronik HAL_GPIO_TogglePin, benötigte Zeit für ein STM32F7.


von epika (Gast)


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
}

von Markus M. (adrock)


Lesenswert?

Hast Du Dir mal angeschaut wieviele Assembler-Befehle der Compiler 
daraus macht und wieviele Taktzyklen diese benötigen?

Ist Optimierung im Compiler aktiviert?

von Thomas D. (tom_d)


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?

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Einfach mal das GPIO Toggle Register direkt beschreiben. Dann ist der 
HAL Overhead schon mal raus.

von epika (Gast)


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...

von A. B. (Gast)


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 ...

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
Noch kein Account? Hier anmelden.