2016-09-10 11:32 AM
Hi everybody,
I'm writing this post to ask if someone, please, can help me resolving a problem with the datas-reading from the accelerometer integrated in the STM32F4 Evaluation Board.What I want to do it's simply to read the accelerations datas from the sensor, using the SPI interface. I've had a look at a lot of examples but I still don't know why my code doesn't work.Here the main functions:void WriteAccelerometer(SPI_HandleTypeDef SPI, uint8_t address, uint8_t data){ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); //CS --> Low HAL_SPI_Transmit(&SPI,&address,1,50); HAL_SPI_Transmit(&SPI,&data,1,50); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); //CS --> High} uint8_t ReadAccelerometer(SPI_HandleTypeDef SPI, uint8_t address, uint8_t data){ address = address | 0x80; HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET); //CS --> Low HAL_SPI_Transmit(&SPI,&address,1,50); HAL_SPI_Receive(&SPI,&data,1,50); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET); //CS --> High return data;}Here the SPI configuration function:static void MX_SPI1_Init(void){ hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi1.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi1) != HAL_OK) { Error_Handler(); } //WriteAccelerometer(hspi1,0x23,0xC9); //reset //WriteAccelerometer(hspi1,0x21,0x00);}I use the two functions reported in this post to configurate and read the accelerometer with this commands:uint8_t config_address = 0x20;uint8_t config_data = 0x27; uint8_t Address_ACCX = 0x29;uint8_t Address_ACCY = 0x2B;uint8_t Address_ACCZ = 0x2D;WriteAccelerometer(hspi1,config_address,config_data); //config// read data:AccX = ReadAccelerometer(hspi1,Address_ACCX,AccX);AccY = ReadAccelerometer(hspi1,Address_ACCY,AccY);AccZ = ReadAccelerometer(hspi1,Address_ACCZ,AccZ);Thank you in advance for the help..Simone2017-10-31 03:11 PM
What are the values of BW_RATE, POWER_CTL
and INT_SRC?
2017-10-31 03:13 PM
Also, what discovery board are you using? Have you verified that your CS pin is correct through the schematic?
2017-10-31 03:23 PM
Your ADXL CS pin will be different to the one required by the accelerometer on the board though, correct?
2017-10-31 03:26 PM
I see that is about adxl345 board companent arrays.Lis is working.
2017-10-31 03:27 PM
No ,it was on different pin
2017-10-31 03:30 PM
My opinion is pull-up resistor is making a trouble or maybe R4 resistor(there is on the board)
2017-10-31 03:59 PM
Is
ADXL345_CS_Pin GPIO PE3 on the STM32F4?
2017-11-01 07:49 PM
Just confirming, you are using the STM32F4DISCOVERY board with the LIS3DSH MEMS (and you are trying to use the LIS3DSH) ?
Datasheet:
I don't see a pull-up resistor being used between the MEMS and STM32?
2017-11-11 11:49 PM
Hi Luke,
Sorry my late response,I only got a job and I was very busy.I used ADXL345(this is why failure).LIS3DSH is successful.