AnsweredAssumed Answered

STM32F4 Discovery Accelerometer SPI Problem

Question asked by draz.raz on Dec 9, 2012
Latest reply on Jul 14, 2016 by greer.roy
Hello,

I'm trying to get the MEMS Accelerometer on my STM32F4 Discovery Board to run with a simple code, but I don't make it.


Heres my code:

int main(void)


{

        SystemInit();

        GPIO_InitTypeDef GPIO_InitStructure;
        SPI_InitTypeDef  SPI_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE , ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);


          //Init SPI-Pins
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
          //Init CS-Pin
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOE, &GPIO_InitStructure);

          GPIO_SetBits(GPIOE, GPIO_Pin_3);  //Set CS high


          GPIO_PinAFConfig (GPIOA, GPIO_PinSource5 |GPIO_PinSource6 |GPIO_PinSource7 , GPIO_AF_SPI1);


          SPI_I2S_DeInit(SPI1);
          SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
          SPI_InitStructure.SPI_Mode = SPI_Mode_Master ;
          SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b ;
          SPI_InitStructure.SPI_CPOL = SPI_CPOL_High    ;
          SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
          SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;
          SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
          SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
          SPI_InitStructure.SPI_CRCPolynomial = 0;
          SPI_Init(SPI1, &SPI_InitStructure);



          SPI_Cmd(SPI1, ENABLE);

          GPIO_ResetBits(GPIOE, GPIO_Pin_3);


          SPI_I2S_SendData(SPI1, 0x20C7);    //Sensor Config



    while(1){
        //Read Y-Axis
        SPI_I2S_SendData(SPI1, 0xAB00);
        SPI_I2S_ReceiveData(SPI1);
    }


I'm running this in Debug-mode only (step by step), so there should not be any timing problems due to missing flag-status requests.
After sending the data, RXNE bit in SPI SR Register is set but the SPI Data Register always contains 0x0000. I have also tried different modes changing CPOL and CPHA, no results.
I am using CooCox IDE


I hope somebody can help!

Thanks,
Alex.

Outcomes