Hallo, ich beschäftige mich gerade etwas mit dem STM32F105 und FreeRTOS. Ich wollte vorallem etwas mit der UART herumprobieren. Also habe ich alles nötige aus dem beigelegten Demoprogramm "CORTEX_STM32F103_GCC_Rowley" kopiert. Dachte ich zumindest. Das Programm funktionierte anfangs auch ganz ordentlich. Nur wenn man längere Zeit grössere Datenmengen über die UART geschickt hatte kam es zu Problemen, dass sich Lese- und Schreibpointer der Queues verschoben haben. Also nochmal von vorne angefangen und das komplette Beispielprogramm geladen. Hier hat es funktioniert. Offensichtlich habe ich doch etwas vergessen aus dem Quellcode mitzunehmen. Nach dem ich den Quellcode intensiver durchgeschaut hatte, fiel mir folgende Zeile auf: NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 ); Nach dem ich die Zeile in mein Projekt übernommen hatte, funktioniert nun auch mein zusammgebasteltes Demoprojekt. Um zu verstehen, was die Zeile macht habe ich mir den Quellcode angeschaut und anschliessen PM0056 ( http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf ). Dort wird auf Seite 134 das Register beschrieben. Es wird festgelegt, dass es 16 Priotiäten und 0 Subprioritäten gibt. Abschliessend wollte ich wissen, wie der Reset Zustand ist um zu verstehen, was genau bei meinem ersten Versuch schiefgelaufen ist. Hier kommt nun die eigentliche Frage: tl;dr Laut PM0056 ( http://www.st.com/st-web-ui/static/active/en/resource/technical/document/programming_manual/CD00228163.pdf ) ist der Standardwert des Registers SCB_AIRCR 0xFA050000. => PRIGROUP[2:0] = 0b000. Laut Table 45 sind die gültigen Werte aber zwischen 0b011 und 0b111. Was bedeutet 0b000 bzw. wie vehält sich die MCU bzw. wie interpretiert es die Prioritäten (welche Aufteilung)? CU, Jay
Schau ins ARMv7M Architecture Reference Manual, da ist das alles detailliert dokumentiert. zB Seite 636 und 717.
Hallo, erstmal danke. Mal sehen, ob ich das richtig verstehe: STM32 benutzt 4bits für die Prioritäten. Laut dem Reference Manual sind die anderen 4bits als 0 zu behandeln. Daraus folgere ich, dass die PRIGROUP 0 bis 3 für STM32 quasi identisch sind, da die subpriority bits in allen Fällen 0 sind. Zwar ändert sich die Anzahl der group priority bits, aber die Reihenfolge/Priorität bleibt erhalten. Wenn das, was ich geschrieben habe, stimmt dann liegt das "Problem" irgendwo im Quellcode. Irgendwo wird also wahrscheinlich auf das Register zugegriffen um irgendwas berechnen. Da ich nicht direkt mit den Registern arbeite sondern die SPL verwende werde ich wohl dort fündig. Wahrscheinlich steht irgendwo in einem Kommentar: "Achja wenn du vorher nicht 'NVIC_PriorityGroupConfig' aufgerufen hast funktioniert das hier nicht richtig." CU, Jay
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.