Question
I use LSM9DS1 with STM32L433 and get strange data.
I use LSM9DS1 with STM32L433 and get strange data.
Initialization code:
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = CTRL_REG4;
data = 0x38; //0b00111000
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = CTRL_REG5_XL;
data = 0x38; //0b00111000
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = CTRL_REG1_G;
data = 0x80; //0b01000000
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = FIFO_CTRL;
data = 0xC0; //0b11000000
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = CTRL_REG9;
data = 0x06; //0b00000110
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_RESET);
address = CTRL_REG1_M;
data = 0xF8; //0b11111000
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_RESET);
address = CTRL_REG3_M;
data = 0x04; //0b00000100
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_RESET);
address = CTRL_REG4_M;
data = 0x0C; //0b00001100
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Transmit(&hspi1, &data, sizeof(address), 0x1000);
HAL_GPIO_WritePin(CS_M_GPIO_Port, CS_M_Pin, GPIO_PIN_SET);FIFO read code:
{
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
uint8_t address = FIFO_SRC | 0x80;
uint8_t data;
uint16_t gyro_temp[3];
uint16_t accel_temp[3];
uint8_t data_temp[2];
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
HAL_SPI_Receive(&hspi1, &data, sizeof(data), 0x1000);
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
uint8_t count = data & 0x1F;
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_RESET);
address = OUT_X_L_G | 0x80;
HAL_SPI_Transmit(&hspi1, &address, sizeof(address), 0x1000);
for (uint8_t i = 0; i < count; i++)
{
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
gyro_temp[0] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
gyro_temp[1] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
gyro_temp[2] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
accel_temp[0] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
accel_temp[1] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
HAL_SPI_Receive(&hspi1, &data_temp[0], sizeof(data_temp[0]), 0x1000);
HAL_SPI_Receive(&hspi1, &data_temp[1], sizeof(data_temp[1]), 0x1000);
accel_temp[2] = (int16_t) (((int16_t)data_temp[1] << 8) | data_temp[0]);
uint8_t sym_count = sprintf(wtext, "%u;%u;%u;%u;%u;%u;\r\n", accel_temp[0], accel_temp[1], accel_temp[2], gyro_temp[0], gyro_temp[1], gyro_temp[2]);
f_write(&file, wtext, sym_count+1 , (void *)&wbytes);
}
HAL_GPIO_WritePin(CS_A_G_GPIO_Port, CS_A_G_Pin, GPIO_PIN_SET);
}Can someone explain what I'm doing wrong?
