Forum: Mikrocontroller und Digitale Elektronik STM32L152 LED zum leuchten bringen will einfach nicht.


von Rab Y. (Firma: asd) (rabik)


Lesenswert?

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.

von Patrick S. (pad)


Lesenswert?

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ß

von ui (Gast)


Lesenswert?

schonmal mit dem Debugger reingegangen?

von Manfred F. (manfred_f)


Lesenswert?

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.

von ui (Gast)


Lesenswert?

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!)

von Rab Y. (Firma: asd) (rabik)


Lesenswert?

Ich danke euch Allen für Eure schnelle Antworten.

Ich werde es mit CubeMx versuchen und mich wider melden.


Gruß

Rab.

von Rab Y. (Firma: asd) (rabik)


Lesenswert?

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.

von drolli (Gast)


Lesenswert?

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

von Ui (Gast)


Lesenswert?

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.

von Rab Y. (Firma: asd) (rabik)


Lesenswert?

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.

von Rab Y. (Firma: asd) (rabik)


Lesenswert?

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
Noch kein Account? Hier anmelden.