I/O Pin STM32F4 als Ausgang konfiguriert

Gast #4784114
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.
Gast #4784147
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"
Gast #4784200
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";
Angehängte Dateien:
Gast #4784239
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
#4784964
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.