AnsweredAssumed Answered

pure 8-Bit SPI communication ?

Question asked by Mr_M_from_G on Nov 14, 2013
Latest reply on Nov 14, 2013 by Mr_M_from_G
Hi,

I am in trouble with 8-bit SPI communication. I did this:
  SPI1->CR1 = (uint16_t)( SPI_CR1_MSTR | SPI_CR1_BR_0 | SPI_CR1_BR_1
                          | SPI_CR1_SSI | SPI_CR1_SSM );
  SPI1->CR2 = (uint16_t)(SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2
                                          SPI_CR2_FRXTH);

and to send data this

      while (BitMaskIsClear (SPI1->SR, SPI_SR_TXE));
      SPI1->DR = (uint8_t)(0x0F);
      while (BitMaskIsClear (SPI1->SR, SPI_SR_TXE));
      SPI1->DR = (uint8_t)(0x55);
      while (BitMaskIsClear (SPI1->SR, SPI_SR_TXE));
      SPI1->DR = (uint8_t)(0xAA);
      while (BitMaskIsClear (SPI1->SR, SPI_SR_TXE));
      SPI1->DR = (uint8_t)(0x5A);

but I get 4 times 16 Bit out with the high byte always being 0x00.

How can I send only 8 bit with each access to ->DR without doing any prepacking before loading ->DR ? Also I would like to repeat this in a loop to send any number (even or odd) of bytes.

I didn't try it yet but I guess there will be a similiar problem when trying to read single bytes out of ->DR while there are two bytes in it. Are there any hints on this?

I read the data sheet but I feel it is a bit confusing.

I am using STM32F051, GCC

Thank you very much for any help

Martin

Outcomes