AnsweredAssumed Answered

STM32F4 Endianess and 24 bit data

Question asked by ressel.tim on Apr 29, 2018
Latest reply on Jun 11, 2018 by dhenry

Hi, trying to get I2S working with 24 bit data. The function call HAL_I2S_Transmit takes a pointer to unsigned 16 bit var so there needs to be 2 transfers to get 24 bits into the I2S. I am using an unsigned 32 bit var and putting the 24 bit value into it, left justified. When the HAL driver unpacks the 32 bit data it does so backwards. Example:


      thisData = 0x12345678;
      uint16_t *pData = (uint16_t *) &thisData;
      uint16_t data1 = (*pData++);
      uint16_t data2 = (*pData++);

data1 gets the lower 16 bits: 0x5678
data2 gets the upper 16 bits: 0x1234

I need to take a 24 bit number and put it into a 32 bit variable, left justified, and send a 16 bit pointer to the HAL I2S function. How do I do this? What am I missing?