如何使用HAL stm32库通过SPI传输signed(int)值?

时间:2016-03-11 11:50:46

标签: microcontroller stm32 spi stm32f4discovery cortex-m

我正在尝试从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一样。 如何接收和传输签名值&

1 个答案:

答案 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