Hallo zusammen Ich stehe gerade ziemlich auf dem Schlauch... Ich lese mittels SPI einen Datenstrom ein. Dieser wird mittels DMA direkt in einen grossen 8-Bit-Buffer kopiert, was auch sehr gut funktioniert. Jetzt möchte ich gerne eine 32-Bit-Präambel in meinem Speicher suchen. Ich dachte ich könnte einfach mit einer 32-Bit-Variablen auf den Speicher zugreiffen und so mit meiner Präambel vergleichen: uint8_t SPI_SLAVE_Buffer_Rx[BufferSize_RX]; uint32_t *RX_zwischenBuffer = 0; SPI_SLAVE_Buffer_Rx[0]=0xFF; SPI_SLAVE_Buffer_Rx[1]=0xF0; SPI_SLAVE_Buffer_Rx[2]=0x0F; SPI_SLAVE_Buffer_Rx[3]=0x00; RX_zwischenBuffer=(uint32_t *)SPI_SLAVE_Buffer_Rx; RX_result_Buffer=*RX_zwischenBuffer^Barker_Korr_Reg; Das Problem ist jedoch, dass die Speicherorganisation beim STM32 anscheinend nicht ganz so ist wie ich es mir erwünsche. Anstatt der 0xFFF00F00 (oder das gespiegelte) kriege ich 0xFF0FF. Ich denke dies irgendwas mit LowByte-HighByte oder so zu tun. Natürlich könnte ich die einzelnen Bytes manuell mit schieben an die richtige Stelle des Buffers legen, doch dies möchte ich eigentlich aus Zeitgründen vermeiden. Kennt jemand eine Möglichkeit, wie ich direkt die 32 Bit in meinen Buffer kriege? Freundliche Grüsse
R. K. schrieb: > 0xFFF00F00 (oder das gespiegelte) kriege ich 0xFF0FF. Ich denke dies 0xFF0FF = 0x000FF0FF bzw 00 0F F0 FF. Na merkst du was?
R. K. schrieb: > SPI_SLAVE_Buffer_Rx[0]=0xFF; > SPI_SLAVE_Buffer_Rx[1]=0xF0; > SPI_SLAVE_Buffer_Rx[2]=0x0F; > SPI_SLAVE_Buffer_Rx[3]=0x00; > kriege ich 0xFF0FF Was willst du denn sonst kriegen? Das ist Little Endian, Low Byte First. Setz' das doch einfach mal zusammen: FF aus Rx0 >> FF + F0 aus Rx1 >> F0FF + 0F aus Rx2 >> 0FF0FF + 00 aus Rx3 >> 000FF0FF Und die führenden Nullen sparen wir uns halt: FF0FF. mfg.
Ok, vielen Dank für die super schnelle Fehlerlösung! Ich habe meinen Fehler gefunden. Ich habe beim SPI-senden und bei SPI empfange die LSB-MSB-Rehenfolge vertauscht... Der Fehler war also nur indikert im Speicher So wurde aus meinem 0xF0 ein 0x0F und aus 0x0F ein 0xF0. das resultierte in meiner 0x0FF0 statt 0xF00F
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.