Behörden, Ämter und sonstige Bremsen...im Sept. 14 die Zusage und ab Sept. 15 konnten wir in die Wohnung, eben der Osten, da braucht keiner Miete da stehen die Wohnungen leer... Na ja nun füllt man sie mit Asylanten auf...
Gerhard
Behörden, Ämter und sonstige Bremsen...im Sept. 14 die Zusage und ab Sept. 15 konnten wir in die Wohnung, eben der Osten, da braucht keiner Miete da stehen die Wohnungen leer... Na ja nun füllt man sie mit Asylanten auf...
Gerhard
Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint
Da ich grad Ernst mache...ist es normal, das Em::Blocks jetzt EmBitz heißt?
Mal noch was anderes...hat jemand ne Ahnung, wie ich die Bibliotheken von ST für den F446 in EmBitz einbinden kann? Nicht nur in einem einzelnen Projekt, sondern so daß ich die gleich in einem neun Projekt zur Verfügung habe?
Geändert von White_Fox (25.03.2016 um 18:00 Uhr)
Also das weiss ich nicht , vielleicht mal Tante Google befragen. Ich arbeite fast nur noch unter Linux und Geany, macht sich einigermaßen gut, solange man keine eigenen Libraries mit einbinden möchte, ins projekt. Das habe ich noch nicht geschnallt wie es geht...
Nun ist bald wieder gartenarbeit, dann ist der Spass bald zu ende mit dem Basteln Programmieren, jedenfalls im grossen Umfange...
Frohe Ostern und einen fleissigen Osterhasen wünsche
Gerhard
Danke, dir auch ein schönes Osterfest.
Google hat mir noch nichts brauchbares ausgespuckt. Ich hab jetzt ein Nucleo mit nem STM32-F446 mit diversen Zusatzboards. Es gibt unzählige Möglichkeiten den STM32 zu programmieren. Die meisten beruhen auf irgendeinem Eclipse-Verschnitt mit irgend einem Plug-In und allerhand Konfigurationsarbeit. Mit ebenso viel negativen Kommentaren mit diesen Eclipse-Verschnitten. Wenn ich daran denke daß ich schon einen halben Nachmittag gebraucht habe um bloß die Firmware vom ST-Link zu aktualisieren halte ich mich davon lieber fern. Ich will programmieren, nicht konfigurieren.
Die Cube von ST wollte ich auch vermeiden...zuviel Klickibunti, ich will auch etwas davon verstehen wie der STM32 arbeitet.
Ich kann die EDU-Version vom J-Link (und damit das Embedded Studio von Segger) nutzen, aber ich kann keine Schnittstelle für einen externen Debugger am Nucleo finden.
Ich hab jetzt EmBlitz installiert, das scheint mir recht ordentlich zu sein. Die Oberfläche erinnert ich an die vom Visual Studio, aber wie gesagt, obige Frage steht immer noch im Raum...
Also...ich hab meinen ersten STM32-Erfolg eingefahren. Die grüne LED auf dem Nucleo-Board leuchtet.
Als IDE hab ich das Embedded Studio von Segger verwendet, ich programmiere mit dem J-Link- Für den nucleo-eigenen STLink gibts was zum draufflashen, damit der auch als J-Link dient. Die Hardware besteht aus einem Nucleo-64-Board mit einem STM32-F446RE.
Zuerst hab ich das entsprechende Package (STM32-F4xx) installiert. Embedded Studio hat einen sog. Package-Manager, der das bewerkstelligt. Im Package sind die notwendigen Bibliotheken enthalten. Danach war erstmal Datenblattlesen dran. Wichtig ist die "STM32F446 Reference". Dort werden fast alle notwendigen Register erklärt die benötigt werden, um die Ports zu konfigurieren. Hier lauern auch schon die ersten Fallen. Die Peripherie (dazu zählen auch die Ports) müssen noch an die Taktversorgung angeschlossen werden, sonst tut sich nix. Dies muß übrigens auch noch VOR der eigentlichen Registerkonfiguration geschehen. Die zweite Falle ist: Das Bit für die LED soll, wie ich von einem freundlichen USer erfahren habe, besser NICHT über das output-Data-Register (ODR) geschehen, sondern über BSRR.
Der entsprechende Thread ist hier:
https://www.roboternetz.de/community...e-zur-C-Syntax
Noch ein Tip zur Entwirrung:
Embedded Studio erstellt sofort ein kleines "Hello-World-Projekt zum Einstieg für euch. Im Prinzip ist das eine Schleife, in der eine Variable n 100-mal hochgezählt und zusammen mit einem "Hello World" ausgegeben wird. Die Ausgabe geschieht mit einer Funktion printf();
Nun ist das Nucleo-Board ja nur mit ner lumpigen LED und nem Taster ausgerüstet und nicht mit einem LCD oder so. Die printf()-Funktion sendet die Daten über den J-Link an den Debugger. Der gesendete Inhalt wird in einem kleinen Fenster unten in der Mitte angezeigt. Zum Fehlersuchen wird das später bestimmt sehr nützlich.
Das ist der Code von meinem ersten Programm:
Code:#include <stdio.h> #include <stdlib.h> #include <stm32f446xx.h> void main(void) { RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Taktversorgung Port A GPIOA->MODER |= (GPIO_MODER_MODER5_0); //A5 => Ausgang GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5); //A5 0> Push-Pull GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5); //A5 ohne Pullup-Pulldown printf("Einstellung fertig\n"); GPIOA->BSRR |= GPIO_BSRR_BS_5; //Ausgang A5 setzen printf("LED gesetzt\n"); while(1){ } }
Mein zweites Programm. Dieses Mal wird noch der Button mit einbezogen.
Die LED wid eingeschaltet, solange der Knopf gedrückt ist.
Code:#include <stdio.h> #include <stdlib.h> #include <stm32f446xx.h> void configLed(){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Taktversorgung Port A GPIOA->MODER |= (GPIO_MODER_MODER5_0); //A5 => Ausgang GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5); //A5 0> Push-Pull GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5); //A5 ohne Pullup-Pulldown } void configButton(){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; //Taktversorgung Port C GPIOC->MODER |= GPIO_MODER_MODER0_0; //C13 => Eingang GPIOC->PUPDR |= GPIO_PUPDR_PUPDR13_1; //C13 => Pulldown einschalten } void main(void) { configLed(); configButton(); printf("Einstellung fertig\n"); while(1){ if(!(GPIOC->IDR & GPIO_IDR_IDR_13)){ GPIOA->BSRR |= GPIO_BSRR_BS_5; //Ausgang A5 setzen printf("Knopf gedrückt\n"); } else{ GPIOA->BSRR |= (GPIO_BSRR_BR_5); //Ausgang A5 zurücksetzen printf("Knopf nicht gedrückt\n"); } } }
Edit:
Noch eine Frage...gibt es in C eigentlich die Möglichkeit, ein Bit direkt zu kopieren? In Pseudocode ausgedrückt:
Sodaß ich mir das If-Statement sparen könnte.Code:PA5 == PC13;
Geändert von White_Fox (19.06.2016 um 14:19 Uhr)
Hallo,
Müsste lauten:Code:GPIOA->BSRR |= (GPIO_BSRR_BR_5); //Ausgang A5 zurücksetzen
Code:GPIOA->BSRR &= ~(GPIO_BSRR_BR_5); //Ausgang A5 zurücksetzenNur wenn du die Ports als Bitfelder definierst.Noch eine Frage...gibt es in C eigentlich die Möglichkeit, ein Bit direkt zu kopieren?
Allerdings spielen dann noch einige compilerspezifische Dinge mit rein.
MfG Peter(TOO)
Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?
Lesezeichen