我使用LSM9DS1和 STM32L433并得到奇怪的数据。
初始化代码:
FIFO读取代码:
谁能解释我做错了什么?
以上来自于谷歌翻译
以下为原文
I use LSM9DS1 with STM32L433 and get strange data.
Ini tialization 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;rn", 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?
0
|
|
8个回答
|
|
|
|