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
Ohoh, niemals niemals while schleifen in interrupt handler verwenden! :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.