STM32F411 | in Interupt Period ändern?

Gast #5065293
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
#5065551
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.
Gast #5065578
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren