Hallo Leute,
ich wollte mal wieder den UART am STm32F407 in Betrieb nehmen.
Das ganze funktioniert auch.
Ich verwende (für diese einfachen Dinge) keine Treiber, da ich denke,
dass eine 5 zeilige UART-Initialisierung auch noch mit puren Registern
erfolgen kann, ohne dass es einem über dsen Kopf wächst :D
Aber nun zu meiner Frage:
Um die Alternate Port functions nutzen zu können muss ich im
GPIOx->MODER Register die Alternate Function aktivieren. Habe bemerkt,
dss dies nur mit bereits eingeschalteter GPIO-Clock geht. Ebenfall habe
ich bemerkt, dass ich die GPIO-Clock einige Takte früher initialisieren
muss, als das MODER-Register.
Schreibe ich:
1 | RCC->AHB1ENR |= RCC_AHB1_ENR_GPIODEN;
|
2 | GPIOD->MODER = 0x12345678; //Beispiel Wert
|
spo klappt das ganze nicht. Das MODER bleibt auf 0.
Erst wenn eine delay eingefügt wird
1 | RCC->AHB1ENR |= RCC_AHB1_ENR_GPIODEN;
|
2 | wait(); //Verzögert um einige takte...
|
3 | GPIOD->MODER = 0x12345678; //Beispiel Wert
|
funktioniert es.
Hat jemand einen Tipp für mich, wie ich es lösen kann, dass ich die
Clock einschalte und dann das MODER setze, ohne übermäßg viel Zeit zu
warten?
Eventuell:
1 | RCC->AHB1ENR |= RCC_AHB1_ENR_GPIODEN;
|
2 | while(GPIOD->MODER != 0x12345678)
|
3 | {
|
4 | GPIOD->MODER = 0x12345678;
|
5 | }
|
???
Vielen Dank...