Forum: Mikrocontroller und Digitale Elektronik STM32 Delay in For-Schleife geht nicht?


von Rudii (Gast)


Lesenswert?

Guden :)

Ich habe gerade festgestellt das meine HAL_Delays(); in einer 
For-Schleife nicht ausgeführt werden.

uC: STM32F411RE-Nucleo
IDE: SW4STM32
benutzt wird die HAL-Firmware.

Code:
1
for(tlc_gsclk_counter = 0; tlc_gsclk_counter > 4095; tlc_gsclk_counter++)
2
      {
3
        for(tlc_data_counter = 0; tlc_data_counter > tlcs_in_series*192-1; tlc_data_counter+=8)
4
        {
5
          //[] = data_counter
6
          spi_txBuffer = 0xFF;
7
          HAL_SPI_Transmit_IT(&hspi2, &spi_txBuffer, 7);
8
          while(HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY){}
9
        }
10
11
        HAL_GPIO_WritePin(TLC_ctrlPort, TLC_pin_GSCLK, SET);
12
        HAL_Delay(1000); //HIER!!!
13
        HAL_GPIO_WritePin(TLC_ctrlPort, TLC_pin_GSCLK, RESET);
14
        HAL_Delay(1000); //UND HIER!!!
15
      }

Es funktioniert eig. alles. Also hoffe ihr seid nicht böse das hier z.B. 
die Initialisierungen fehlen.

...Bis halt auf die Delays. Mir ist auch aufgefallen das ich keine 
Debugging Breakpoints in der For-Schleife setzen kann, warum?

Hoffe mir hilft wer :)
MfG.

von Rudii (Gast)


Lesenswert?

Wenn ich die HAL-Delay(); aufrufe außerhalb der For-Schleife aufrufe, 
gehen sie.

MfG.

von hp-freund (Gast)


Lesenswert?

Rudii schrieb:
> for(tlc_gsclk_counter = 0; tlc_gsclk_counter > 4095;tlc_gsclk_counter++)

Überprüfe das mal...

von Steffen R. (steffen_rose)


Lesenswert?

Was heißt 'geht nicht'?
- die Delays kehren sofort zurück
- die Delays kehren niemals zurück
- die Delays werden nie erreicht
- die Delays werden übersprungen

um mal ein paar Beispiele zu nennen.

von hp-freund (Gast)


Lesenswert?

Die ganze for Schleife wird wegoptimiert ;-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

hp-freund schrieb:
> for(tlc_gsclk_counter = 0; tlc_gsclk_counter > 4095;tlc_gsclk_counter++)

Das ist doch mal ne spassige Bedingung :-)

> for(tlc_data_counter = 0; tlc_data_counter > tlcs_in_series*192-1;
> tlc_data_counter+=8)

Und die hier auch...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

hp-freund schrieb:
> Die ganze for Schleife wird wegoptimiert ;-)

Genauer gesagt: Beide for-Schleifen. In beiden ist die Bedingung falsch.

Falsch:
1
for(tlc_gsclk_counter = 0; tlc_gsclk_counter > 4095; tlc_gsclk_counter++)

Vermutlich richtig:
1
for(tlc_gsclk_counter = 0; tlc_gsclk_counter < 4096; tlc_gsclk_counter++)

Falsch:
1
for(tlc_data_counter = 0; tlc_data_counter > tlcs_in_series*192-1; tlc_data_counter+=8)

Vermutlich richtig:
1
for(tlc_data_counter = 0; tlc_data_counter < tlcs_in_series*192; tlc_data_counter+=8)

Beachte auch die Werte:
   Alt: 4095, neu 4096
   Alt: ...*192-1, neu: ...*192

von public (Gast)


Lesenswert?

Hehe :D

zwischendurch auch mal schlafen gehen, dann sieht man auch wieder den 
Wald.

von Rudii (Gast)


Lesenswert?

Oh mein Kopf. Tut mir wirklich leid.

Vielen dank.

public schrieb:
> Hehe :D
>
> zwischendurch auch mal schlafen gehen, dann sieht man auch wieder den
> Wald.


Auf jeden Fall :D
MfG.

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.