Hallo an Alle, ich habe mir vor geraumer Zeit das STM32L152 - Discovery Board gekauft. Ich bin was µC angeht ein Anfänger. Ich habe mir einige Beispiele angeschaut und auch soweit verstanden. So dachte ich es. Ich verwende die KEIL Umgebung und die STDPeriph_Lib. Es gibt auch hier im Forum schon dieses Thema, aber leider hat mir das nicht weiter geholfen. Mein Code ist sehr simple und sieht folgendermaßen aus. int main (void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NoPull; GPIO_Init(GPIOB, &GPIO_InitStructure); while (1) { GPIO_SetBits(GPIOB,GPIO_Pin_7); } } Dadurch sollte theoretisch die grüne LED dauerhaft leuchten, da diese an PortB Pin 7 hängt. In jedem Forum führt dieser Code oder so ähnlich bei jedem zum Erfolg außer bei mir. Ich habe mir auch die Beispiele von STM runtergeladen, da habe ich auch irgendwie kein Erfolg. Nur das Beispiel, dass ich mit der Keil Umgebung als Beispiel runterladen kann funktioniert. Das Projekt heißt Blinky und lässt beide Leds abwechselnd blinken. Da ist der Code aber sehr umfangreich. Hat jemand eine Idee was ich falsch mache? Der Compiler spuckt keine Fehler aus und das Flashen scheint auch zu funktionieren, nur es rührt sich einfach nichts. Würde mich über jede Hilfe freuen. Ich weiß einfach nicht was ich falsch mache. Schöne Grüße.
Hi, ich würde dir ehrlich gesagt empfehle gleich mit der HAL anzufangen. Dann hast du auch die Möglichkeit dir den Initialisierungscode mit CubeMX generieren zu lassen. So kannst du dort schonmal Fehler ausschließen. Gruß
Rab Y. schrieb: > Mein > Code ist sehr simple und sieht folgendermaßen aus. Und wo ist der ganze Rest? Also der ganze Wust an Initialisierungen die man beim STM32 so vornehmen muss. Kann mich Patrick da nur anschließen: Benutze CubeMX.
2 Sachen die ich mir vorstellen könnte: - Falscher Startup Code? -> nimm das Beispielprojekt von Keil (das funktioniert) und pass den Code darin nur an! - LEDs mit inversen Logik (High Impuls schaltet die LED aus!)
Ich danke euch Allen für Eure schnelle Antworten. Ich werde es mit CubeMx versuchen und mich wider melden. Gruß Rab.
Hi Leute, Danke für den Tipp mit CubeMx, jetzt geht es tatsächlich :) Jetzt habe ich aber eine andere Frage, ich kann jetzt nicht mehr auf die Funktionen zugreifen also Bsp: GPIO_SetBits() ,sondern muss das per ,ich glaube das nennt man Bitmanipuilation, machen also: GPIOB->BRR = GPIO_PIN_7; Wenn ich die Datei stm32l1xx.h hinzufüge, dann fehlt widerum eine andere Datei und das Projekt lässt sich nicht mehr erstellen. In welcher Datei befinden sich denn diese Funktionen genau? Also die Funktionen zum Bsp. Auslesen, Setzen und Löschen der Bits. Danke nochmal für Eure Hilfe. Gruß Rab.
Hi Ich hatte für den STM32L0 ein ähnliches Blink Programm geschrieben und hier dokumentiert: https://drolliblog.wordpress.com/2017/04/06/led-blink-with-the-stm32l031x6/ > Wenn ich die Datei stm32l1xx.h hinzufüge, dann fehlt widerum... Ich habe einen ähnlichen Ansatz verfolgt. Welche Dateien noch fehlen und woher man diese kopieren kann, habe ich ebenfalls im oben referenzierten Artikel dokumentiert. Grüße, Oliver
Wenn CubeMX und HAL im Einsatz sind heißt es: HAL_GPIO_WritePIN(GPIOB,GPIO_PIN_7,GPIO_PIN_SET) Lade Dir das Handbuch runter (UM1816). Bei CubeMX mit LL sieht es wieder etwas anders aus.
Hi, ok das Handbuch hilft mir um einiges weiter. Vielen Dank. Jetzt bin ich wirklich um einiges weiter gekommen und die Leds leuchten und der Syntax mit HAL_GPIO_WritePIN... funktioniert auch. Aber jedesmal wenn ich denke ich hab endlich alles verstanden um richtig loszulegen, dann kommt mir was anderes in die Quere. Nur eine Frage: ist diese Logik zum Togglen der Leds so richtig? Weil es funktioniert nicht, er bleibt immer nur in der ersten Bedingung hängen. Wenn also a als false initialisiert wird bleibt der in der false bedingung und die LEDs leuchten dauerhaft oder wenn eben false dann bleiben die LEDs aus. Warum Togglen die nicht? bool a; while (1) { if (a == true) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET); a = false; } else if { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET); a = true; } Danke an alle. Ihr seid echt super. Schöne Grüße.
Ok, hat sich erledigt. Das Togglen hat die ganze Zeit funktioniert, nur es wwar anscheinend so schnell, dass ich es nicht sehen konnte. Habe ein Delay eingebaut und dann konnte ich es sehen. Vielen Dank an Alle. Gruß Rab
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.