Der Output-Speed ist für die Schaltflanken der IOs zuständig.
Er kontrolliert also die Slew-Rate (also die Anstiegs- und Abfallzeit der Flanken).
Je größer die Anstiegszeit, desto größer sind die abgestrahlten Störsignale. Daher sollte man den Output Speed nur so schnell wie nötig konfigurieren.

Das Speed-Register musst Du übrigens nicht beschreiben, nach dem Reset ist die Default-Einstellung 00 (also Low speed). Nur Port B ist da eine Ausnahme.

Die Komplexität hat übrigens nichts mit dem ARM-Kern zu tun. ST hätte auch Simpel-Peripherie wie beim AVR an den Cortex anbinden können. Aber das wäre doch Verschwendung

Was Du mit "Bus-Anbinden" meinst, verstehe ich nicht. Der Port läuft nach dem Reset sofort (bis auf die paar Ausnahmen wie JTAG, etc.). Du musst nur den Takt für den entsprechenden Port einschalten, wie auch für jede andere Peripherie.
Also z.B. für Port A:
Code:
RCC->AHB1ENR |= ( RCC_AHB1ENR_GPIOAEN );
Danach kannst Du dann ganz normal Bits setzen oder zurücksetzen:
Code:
GPIOA->BSRR |= GPIO_BSRR_BS_0;
oder
Code:
GPIOA->BSRR |= GPIO_BSRR_BR_0;
Oder meinst Du das Umlegen der Peripherie-Funktionen auf andere Pins über das AFR-Register?



Zitat Zitat von White_Fox Beitrag anzeigen
Ah ja...vielen Dank, jetzt ist mir Einiges schon viel klarer, ein paar Feagen hab ich aber noch.

Was ist eigentlich die genaue Funktion des Output-Speed-Registers? Ich werd da aus dem Datenblatt nicht schlau, kann aber auch daran liegen daß ich immer noch mehr oder weniger in meiner AVR-Denke drinhänge und imemr wieder staune, um welchen Mist man sich beim ARM kümmern muß.
Muß ich das Speed-Register eigentlich beschreiben oder wird sich auch so etwas tun?

Ich muß ja, soweit ich das mitbekommen habe, den Port noch irgendwie an einen Bus anbinden. Nach was richtet man sich da, woher weiß ich wie ich da den Port am besten wo anbinde? Wie geht man da vor allem vor, wenn man etwas mehr Peripherie verwendet?

Kann meinen Code leider nicht testen, weil ich Embedded Studio nicht mit dem J-Link zusammenkriege.
J-Link Commander hat aber seltsamerweise keine Probleme mit dem J-Link zu quatschen.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <stm32f446xx.h>

/*********************************************************************
*
*       main()
*
*  Function description
*   Application entry point.
*/
void main(void) {
GPIOA->MODER |= (GPIO_MODER_MODER5_0);    //A5 => Ausgang
GPIOA->OTYPER |= (GPIO_OTYPER_OT_5);      //A5 0> OpenDrain
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5);     //A5 ohne Pullup-Pulldown
}