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.
Setz mal in die Schleife noch ein Delay am Ende. Durch GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; kann das Schalten einfach untergehen.
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.
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"
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.
Sorry, das habe ich gerade gesehen, dass ich einen anderen Pin verwendet habe. Nochmal Vielen Dank
allerdings bekomme ich folgendes: Die Zeit zwischen jede positive Flanke stimmt nicht mit HAL_Delay(100); was ich sende ist: uint8_t mystring[] = "12345678901234567890123456789012345678901234567890";
Trigger hängt in der Luft? Versuch mal mit Single Shot.
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.
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
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.