Hallo. Ich verwende einen STM32F733 und möchte per SPI ein Bitmuster (insgesamt 4 Byte) einlesen. Wollte eigentlich byteweise einlesen. Hier meine Init: hspi3.Instance = SPI3; hspi3.Init.Mode = SPI_MODE_MASTER; hspi3.Init.Direction = SPI_DIRECTION_2LINES; hspi3.Init.DataSize = SPI_DATASIZE_8BIT; hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi3.Init.CLKPhase = SPI_PHASE_2EDGE; hspi3.Init.NSS = SPI_NSS_SOFT; hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi3.Init.TIMode = SPI_TIMODE_DISABLE; hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi3.Init.CRCPolynomial = 7; hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; hspi3.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; HAL_SPI_Init(&hspi3); Zum Starten des Einlesens schreibe ich ins DR Register und der SPI legt los. SPI3->DR = 0 Aber der SPI erzeugt immer 16 Clocks und nicht wie eingestellt 8. Habe CR1 & CR2 schon per Hand durchgeschaut, aber mir fällt nichts auf, warum die Bitlänge nicht passt. Folgende Werte stehen in den Registern: CR1 = 0x037F; CR2 = 0x1748 direkt beim Starten des Einlesens. Mit fällt gerade nichts mehr ein. Kann mir jemand helfen? Vielen Dank. Pepe.
Im RM, 28.5.9, steht's unter "Data Packing", Fig. 351: Das DR ist ein 16-bit Register. SPI3->DR = 0 schreibt beim Datenformat 8 Bit also ZWEI Einträge in den FIFO, sprich es kommen dann eben auch 2 * 8 Bit heraus. Den Pointer auf uint8_t casten!
Kaum schreib ich als uint8_t ins DR funktioniert es auch. Danke für die schnelle Hilfe. Hat mich heute seit 11:30 beschäftigt. Hätt' ich mal früher gefragt ;-)
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.