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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren