Forum: Mikrocontroller und Digitale Elektronik STM32 einstieg


von Sven (Gast)


Lesenswert?

Hallo Liebe Leute,

Ich versuche mich grade im verständniss des STM32f103VET6

aber das klappt nicht so ganz ^^

ich habe 2 Taster auf meinem Board + 1 LED

und will diese LED ein und aus schalten.

Aber mein Code läuft nicht wirklich...

kann mir jemand vielleicht mal nen arschtrit geben das ich meinen fehler 
sehe und daraus lerne?

wäre genial ^^


#include "stm32f10x.h"


GPIO_InitTypeDef GPIO_InitStructure;


int main(void)
{
  SystemInit();


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2,GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);



        if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) = 0)
        {
    GPIOC->BSRR = GPIO_Pin_7; // Led Ein
        }
        if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) = 0)
        {
        GPIOD->BRR = GPIO_Pin_7; // Led aus
        }
        return .0;
}

von Sven (Gast)


Lesenswert?

sry war nen kleiner syntax fehler drine.
aber mein Problem ist das die LED halt garnicht erst an geht wenn ich 
taster 1 drücke...


#include "stm32f10x.h"

GPIO_InitTypeDef GPIO_InitStructure;

int main(void)
{
  SystemInit();

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);

  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2,GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);



        if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)
        {
    GPIOC->BSRR = GPIO_Pin_7; // LED On
        }
        if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
        {
        GPIOD->BRR = GPIO_Pin_7;
        }
        return .0;
}

von Nils H. (irrenhaus)


Lesenswert?

1
if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)
2
        {
3
    GPIOC->BSRR = GPIO_Pin_7; // LED On
4
        }
5
        if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
6
        {
7
        GPIOD->BRR = GPIO_Pin_7;
8
        }

Verifizier mal, ob die LED an Pin 7 von GPIOC oder GPIOD hängt und nimm 
dann für ein und ausschalten das Selbe :)

von RP6Conrad (Gast)


Lesenswert?

Auf welche pinnen sitzt JTAG ? Ist er ausgeschaltet ?

von Sven (Gast)


Lesenswert?

Nils Hesse schrieb:
> if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0)
>         {
>     GPIOC->BSRR = GPIO_Pin_7; // LED On
>         }
>         if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0)
>         {
>         GPIOD->BRR = GPIO_Pin_7;
>         }
>
> Verifizier mal, ob die LED an Pin 7 von GPIOC oder GPIOD hängt und nimm
> dann für ein und ausschalten das Selbe :)

ahhh xD GPIOC

aber geht immer noch nit -.-

von Sven (Gast)


Lesenswert?

RP6Conrad schrieb:
> Auf welche pinnen sitzt JTAG ? Ist er ausgeschaltet ?

Was hat den der JTAG damit zu tuen ?

von Nils H. (irrenhaus)


Lesenswert?

Wenn du Pins nutzen willst, auf welchen JTAG Signale laufen, musst du 
zuerst JTAG ausschalten, ansonsten sind diese Pins nicht für normale 
GPIO Anwendungen verfügbar.

PC7 und PE2/PE3 sind aber nicht für JTAG zuständig. PE2 und PE3 sind 
aber sehr wohl fürs TRACE Interface verantwortlich, also falls du das 
verwendest, solltest du da nochmal nachschauen.

Außerdem:
1
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2,GPIO_Pin_3;

Ich persönlich kenne die Initialisierung hierbei nur so, dass man beide 
Pins miteinander or'ed, also
1
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
Das kann aber auch persönliches Unwissen sein.

Grüße
Nils

von RP6Conrad (Gast)


Lesenswert?

Standard ist den JTAG eingeschaltet, die Pins sind dan auch fest met den 
JTAG verknupft. Die konnen dan nicht angesteuert werden. Diese function 
schaltet der JTAG dan aus : 
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); Aber welche Pins 
sind für JTAG forgesehen bei ihre controller ?

von Matthias K. (matthiask)


Lesenswert?

Du kannst gar nicht so schnell drücken, wie Dein Programm vorbei ist.

Setze die Abfrage mal in eine Schleife.

while(1) {

   ........

}

von Nils H. (irrenhaus)


Lesenswert?

Hihi es sind doch immer wieder die einfachsten Dinge die man übersieht 
:)

von Sven (Gast)


Lesenswert?

ach misst xD

die schleife habe ich ja ganz vergessen vielen dank ^^

von Sven (Gast)


Lesenswert?

noch ne kleine frage gibts ne debounce funktion für tasten ?

beim stm32?

von Rainer S. (rsonline)


Lesenswert?

Wollte auch STM32 einsetzen.

Welchen Compiler verwendest Du?

von Sven (Gast)


Lesenswert?

C

und entwicklungsumgebung atolic

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Lese am besten mal den Artikel STM32 durch.

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.