Forum: Mikrocontroller und Digitale Elektronik STM32F411 | in Interupt Period ändern?


von N00B_AG (Gast)


Lesenswert?

Hello!

Ich habe folgendes Problem (mit dem STM32F411): Ich würde gerne über die 
USART (Eingabe von hTerm) einen Dezimalwert empfangen den ich dann in 
Millisekunden als meine Period verwenden möchte. Der Code so wie er da 
steht funktioniert leider nur halb, denn wenn ich versuche einen wert 
einzugeben der 3-Stellig ist, nimmt er mir nur noch die letzte Ziffer. 
Wo liegt da der Fehler (sorry bin noch anfänger :) )

////////////////////////////////////////////////////////

void USART2_IRQHandler(void) {

  while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)!=SET) {
  }
  int eingabe = (int) USART_ReceiveData (USART2);
  TIM2->ARR = eingabe;

  GPIO_SetBits(GPIOA, GPIO_Pin_5);

  TIM_Cmd (TIM2, ENABLE);

  USART_ClearITPendingBit (USART2, USART_IT_RXNE);
}

////////////////////////////////////////////////////////


Bin für alle Tips dankbar!!!

LG

von Mampf unterwegs (Gast)


Lesenswert?

Ohoh, niemals niemals while schleifen in interrupt handler verwenden! :)

von Mike R. (thesealion)


Lesenswert?

Abgesehen davon, das diese While Schleife (wenn die USART korrekt 
konfiguriert ist) komplett sinnlos ist.

@TE: Schau dir mal an, wie deine Zeichen auf der Seriellen Schnittstelle 
übertragen werden, dann solltest du auch verstehen, warum das mit den 3 
Zeichen so nicht klappen kann.

von Ich (Gast)


Lesenswert?

Hallo,
Über den UART wird üblicherweise 1 Byte Nutzdaten pro Nachricht 
übermittelt.
Das bedeutet ohne Vorzeichen können die Dezumalwerte 0-255 dargestellt 
werden. Wenn du jetzt einen größeren Wert schickst, wo ich mir nicht 
sicher bin, wie du das machst, ohne zu merken, dass etwas komisch ist, 
wird dieser wahrscheinlich in 2 Nachrichten geteilt. Liest du dann nur 
das Low-Byte aus, bekommst du dein Ergebnis.

Daher solltest du dich zuerst etwas mit dem UART beschäftigen und damit 
wie du mehrere Byte Mach dem Empfang zusammenführst.

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.