Forum: Mikrocontroller und Digitale Elektronik I/O Pin STM32F4 als Ausgang konfiguriert


von Student (Gast)


Lesenswert?

Hallo zusammen, Ich habe mit dem Board STM32446E angefangen zu 
programmieren, und ich möchte ein Pin des Boards als Ausgang verwenden, 
Damit der in meinem Hauptprogramm aktivieren bzw deaktivieren kann.

Ich habe mein Pin so konfiguriert:

 static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_RESET);

  /*Configure GPIO pins : PB11 PB4 */
  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}



und in dem Main() mache ich folgendes;

  while (1)
  {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 1);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 0);
  }



Ich messe mit einem Oszilloskop an dem Pin (PA12), aber es kommt nichts 
raus.

von hp-freund (Gast)


Lesenswert?

Setz mal in die Schleife noch ein Delay am Ende.
Durch GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
kann das Schalten einfach untergehen.

von Physiker (Gast)


Lesenswert?

Student schrieb:
> aber es kommt nichts raus.

Das kann nicht sein.

Enwteder kommmt eine 1, eine 0 (Null), oder beides (1/0 wechselnd)
oder ein floatendes Signal heraus.

Also bitte präzisiere deine Beobachtung bzw deine Angaben.

von Student (Gast)


Lesenswert?

Danke für eure Antworten.

hp-freund schrieb:

> Setz mal in die Schleife noch ein Delay am Ende.

Das war.

Jetz versuche ich messen,wie lange die Ausführung der Funktion 
"CDC_Transmit_FS" dauert. Jemand hat mir folgendes gesagt:

"dazu verwendest Du einen I/O-Pin, den Du als Ausgang
konfigurierst, legst den unmittelbar vor Aufruf der Funktion auf High
und unmittelbar nach Aufruf der Funktion auf Low. Mit einem Oszilloskop
kannst Du die Dauer des High-Pulses bestimmen."


  while (1)
  {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 1);
    CDC_Transmit_FS(mystring,strlen((const char*)mystring));
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, 0);
    HAL_Delay(100);

  }


aber wenn ich das so lasse, bleibt den Pin immer mit der Werte "1"

von Jim M. (turboj)


Lesenswert?

Student schrieb:
> Ich messe mit einem Oszilloskop an dem Pin (PA12), aber es kommt nichts
> raus.

Laut dem Code müsstest Du was an P B 12 messen. An P A 12 kommt nix.

von Student (Gast)


Lesenswert?

Sorry, das habe ich gerade gesehen, dass ich einen anderen Pin verwendet 
habe.

Nochmal Vielen Dank

von Student (Gast)


Angehängte Dateien:

Lesenswert?

allerdings bekomme ich folgendes:

Die Zeit zwischen jede positive Flanke stimmt nicht mit HAL_Delay(100);



was ich sende ist:

uint8_t  mystring[] = 
"12345678901234567890123456789012345678901234567890";

von hp-freund (Gast)


Lesenswert?

Trigger hängt in der Luft?
Versuch mal mit Single Shot.

von hp-freund (Gast)


Lesenswert?

Außer dem solltest Du mit einer einfachen Funktion beginnen und nicht 
gleich mit CDC_Transmit_FS.
Da passiert mehr im Hintergrund das die Zeit beeinflusst.

von Student (Gast)


Angehängte Dateien:

Lesenswert?

Das bekomme ich trotzdem...

von Student (Gast)


Lesenswert?

hp-freund schrieb:
> Außer dem solltest Du mit einer einfachen Funktion beginnen und
> nicht
> gleich mit CDC_Transmit_FS.
> Da passiert mehr im Hintergrund das die Zeit beeinflusst.


Ja, das stimmt. Die Sache ist, dass ich gerade die Konfiguration USB CDC 
in FS Modus ausprobiere. Deswegen möchte ich wissen Was wäre denn 
sinnvoll schicken oder empfanden um eine beachtliche Zeit
der Übertragung per USB messen zu können

von Dietrich L. (dietrichl)


Lesenswert?

Student schrieb:
> Das bekomme ich trotzdem...

Bei der gewählten Zeiteinstellung der X-Achse und den kurzen Impulsen 
kann es sein, dass die Samplingrate des Oszi dann zu klein ist und 
Impulse mal verloren gehen.

Mach die Zeiteinstellung mal kleiner.

von Jim M. (turboj)


Lesenswert?

Student schrieb:
> Deswegen möchte ich wissen Was wäre denn
> sinnvoll schicken oder empfanden um eine beachtliche Zeit
> der Übertragung per USB messen zu können

Dann hätte man sich aber mal mit der USB Hardware auch befassen müssen.

Dort gibt es Endpoint Puffer, und solange die leer sind ist das 
CDC_Transmit_FS() nicht viel langsamer als memcpy(). Also ein paar µs 
bei 40 Byte.

Wann das Zeuchs beim PC ankommt kannste so nich messen...

von ui (Gast)


Lesenswert?

Student schrieb:
> Das bekomme ich trotzdem...

Wer misst misst Mist...

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.