我正在尝试从lis3dsh加速度计(STM32f4discovery board)获取数据。我使用HAL库。据我所知,加速度计的输入数据值可能是负值(int类型),但HAL库函数使用uint类型
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
{
......
}
SPI的其他功能也有相同的情况。和USART一样。 如何接收和传输签名值&
答案 0 :(得分:0)
我有使用MPU6050加速度计(STM32F0)的经验。 正如Thanushan Balakrishnan所说的那样,“SPI发送和接收比特流”。查看函数头,该函数需要8位。 如果您尝试从加速计获取数据,可能使用位移操作。对于位移操作,由于符号扩展,应避免使用有符号值。因此,应将传感器的值分配给无符号类型的Rx缓冲区。在位移和oring之后,选择输出类型作为有符号值。该带符号类型输出将为您生成负值和正值。下面是一个示例,说明从IMU接收数据时的数据类型(由I2C制作):
uint8_t RxData[]; //Variable to be assigned for sensor values by SPI
int16_t Accel_X_Out; //Output
HAL_SPI_...(//arguments)
{
Accel_X_Out=((RxData[0] << 8) | RxData[1]);
}
如果需要更多信息,您可以查看链接。 使用签名类型: 的 What does AND 0xFF do? 强> 标志扩展: https://en.wikipedia.org/wiki/Sign_extension