Hi everyone, Das ist wieder ein Beitrag für STM32. Obwohl es schon so viele Beiträge im Forum gibt, helfen sie mir leider nicht bei meinem merkwürdigen Problem. Meine Entwicklungsumgebung: Linux, Sourcery G++ Lite 2010.09-51 for ARM EABI, Eclipse, STM32F10x_StdPeriph_Lib_V3.4.0 aus STM und der uC STM32F103. Der Kode ist sehr einfach, und zwar: int m = 2; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! int main() { int i; // GPIO Configuration USART1_GPIO_Config(); // USART Configuration USART1_Config(); while (1) { USART1_Send ( (uint16_t)'a'); for (i=0; i<1000000; i++); //m = 3; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! } return 0; } Am Anfang lief das erstellte Projekt komplett reibungslos. D.h. Die Kompilierung und das Flash funktionierten. PC hat tatsächlich die Nachrichten („aaa…“)empfangen. Aber dann tritt das komische Problem auf, wenn die Zeile m = 3; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! im Kode eingesetzt ist, um die globale Variable zu ändern. Die Kompilierung und das Flash laufen nach wie vor. Trotzdem empfängt der PC nur das einzige „a“ und wird keine Nachricht mehr auf dem Monitor gezeigt. Anscheinend dürfte man keine globale Variable ändern. Warum funktioniert der uC bei mir nicht mit der globalen Variable? Hat jemand schon auf solchem Problem gestoßen? Vielen Dank im Voraus. Tom
schreib das mal so: ... for (i=0; i<1000000; i++) // [<- ohne semikolon] m = 3;
Schreib volatile int i; sonst wird die Verzögerungsschleife wegoptimiert. Ob USART1_send damit klarkommt, wenn es direkt nacheinander aufgerufen wird, sehe ich nicht, weil der Code dazu fehlt. Grüße, Peter
hi hatte auch ein Problem mit dem usart... mein Problem war das ich nicht gewartet hab bis dieser mit senden fertig ist... es müsste eine Funktion geben die prüft ob der usart fertig ist... diese hab ich in ner while schleife überprüft bis der usart fertig ist....
Sorry, guys :( Bei mir funktioniert das Flash nicht mehr. Wenn das Flash wieder läuft, melde ich mich zurück. Tom
Hallo, I am back :) To Torsten, Dein Vorschlag habe ich probiert. Nach wie vor wird nur ein 'a' gezeigt. To Peter, Eigentlich benutze ich die funktion aus StdPeriph_Lib, und zwar void USART_SendData(USART_TypeDef* USARTx, uint16_t Data). Ich habe "volatile" hinzugefügt. Aber dasselbe Problem tritt auf :( Hat jemand noch eine Idee?
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.