Forum: Mikrocontroller und Digitale Elektronik USART mit STM32VLDiscovery


von Dominik (Gast)


Lesenswert?

Hallo an alle!

Ich steige gerade weider ins µC Programmieren ein, ich hab das mal vor 
ein paar Jahren in der HTL gemacht, aber da hat sich anscheinend einiges 
verändert...

Nach schon langem Herumprobieren mit ADC&co will ich jetzt die 
Ergebnisse mithilfe einer USART-Schnittstelle auf meinen PC bringen.

die entsprechende Hilfe ist von dieser Seite gekommen:
http://www.micromouseonline.com/2009/12/31/stm32-usart-basics/#axzz1rSw8wahp

nur tut sich auf dem Pin PA9(auf dem eigentlich der USART1 TX geschaltet 
ist) nichts (ich hab ein analoges Oszi druafhängen)

meine einzigen konfigurationen am Code war, dass ich die Konstanten 
durch Zahlen ersetzt habe.

das ganze sieht jetzt so aus:

void init_RS485 (void){

  RCC->APB2ENR |= (1<<2);              // enable clock for GPIOA
  GPIOA->CRH   |= (0x0BUL  << 4);     // Tx (PA9) alt. out push-pull
  GPIOA->CRH   |= (0x04UL  << 8);    // Rx (PA10) in floating
  RCC->APB2ENR |= (1<<14);            // enable clock for USART1
  USART1->BRR  = 64000000L/115200L;     // set baudrate
  USART1->CR1 |= (1<<3);       // TX enable
  USART1->CR1 |= (1<<13);           // USART enable

}

int SendChar (int ch)  {
  while ((USART1->SR & (1<<7)!=(1<<7)));    //das 7. Bit ist TXE
  USART1->DR = (ch & 0xFF);
  return (ch);
}

Wenn ich jetzt in einer Endlosschleife ein Zeichen senden lasse tut sich 
auf PA9 absolut GAR NICHTS. Hab auch schon gesucht ob jemand anderes 
dieses Problem hat, finde aber (fast) nur Beiträge, bei denen falsche 
Daten ankommen.

Danke für eure Hilfe,
Dominik

von Oliver J. (skriptkiddy)


Lesenswert?

Schalt mal den "Alternate function I/O clock" an.

Ja - so ist das manchmal, wenn man copy paste macht ohne den Kopf 
einzuschalten.

Gruß Oliver

von Dominik (Gast)


Lesenswert?

1000 Dank!

von Dominik (Gast)


Lesenswert?

da hab' ich wohl den Tag vor dem Abend gelobt, es funktioniert noch 
immer nicht. Habt noch andere Ideen wieso da Funkstille herrscht?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dominik schrieb:
> while ((USART1->SR & (1<<7)!=(1<<7)));
Du kannst diese Abfrage ganz problemlos so abkürzen:
while (USART1->SR & (1<<7));

> finde aber (fast) nur Beiträge, bei denen falsche Daten ankommen.
Das wäre ja schon mal was. Probier also einfach mal, irgendwas 
auszugeben...
BTW: Warum das Rad immer neu erfinden? Ich habe letzten Freitag einfach 
den Beispielcode von ST genommen und nach knapp einer halben Stunde 
Zeichen versendet und empfangen.
Und wenn du danach genau wissen willst, welche Bits da verbogen werden, 
dann siehst du dir den Code einfach mal an...

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.