Microcontroller 如何使用HAL stm32库通过SPI传输有符号(int)值?

Microcontroller 如何使用HAL stm32库通过SPI传输有符号(int)值?,microcontroller,stm32,spi,stm32f4discovery,cortex-m,Microcontroller,Stm32,Spi,Stm32f4discovery,Cortex M,我正在尝试从lis3dsh加速计(STM32f4discovery board)获取数据。我使用哈尔图书馆。据我所知,来自加速计的输入数据值可能是负值(int类型),但HAL库函数使用uint类型操作 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size) { ...... } SPI

我正在尝试从lis3dsh加速计(STM32f4discovery board)获取数据。我使用哈尔图书馆。据我所知,来自加速计的输入数据值可能是负值(int类型),但HAL库函数使用uint类型操作

HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)    
{    
......    
}
SPI的其他功能也存在同样的情况。还有乌萨特。
如何接收和传输有符号值&

我有过使用MPU6050加速计(STM32F0)的经验。
正如塔努山·巴拉克里希南(Thanushan Balakrishnan)在他的评论中所说,“SPI传输和接收比特流”。查看函数头,函数需要8位 若您试图从加速度计获取数据,可能需要使用位移位操作。对于位移位操作,由于符号扩展,应避免使用有符号值。因此,应将传感器的值分配给无符号类型Rx缓冲区。在位移位和或运算后,选择输出类型作为有符号值。该有符号类型输出将为您生成负值和正值。以下是从IMU接收数据(由I2C生成)时的数据类型示例:

uint8_t RxData[]//SPI为传感器值分配的变量
int16加速输出//输出
HAL_SPI_…(//参数)
{

Accel_X_Out=((RxData[0]我有使用MPU6050加速计(STM32F0)的经验。
正如塔努山·巴拉克里希南(Thanushan Balakrishnan)在他的评论中所说的那样,“SPI传输和接收比特流。查看函数头,函数需要8位。” 如果您试图从加速计获取数据,可能会使用位移位操作。对于位移位操作,由于符号扩展,您应该避免使用有符号值。因此,您应该将传感器的值分配给无符号类型Rx缓冲区。在位移位和或“ing”之后,选择输出类型作为有符号值。该有符号类型输出w我将为您生成负值和正值。以下是一个示例,说明从IMU接收数据时(由I2C生成)的数据类型:

uint8_t RxData[];//由SPI为传感器值分配的变量
int16\u t Accel\u X\u Out;//输出
HAL_SPI_…(//参数)
{

加速度X输出=((RxData[0]SPI传输和接收位流。查看函数头,函数需要8位。有符号和无符号仅对使用这些值的更高级别函数重要,您需要在两者之间进行类型转换。SPI传输和接收位流。查看函数头,函数需要8位。有符号和无符号仅重要对于使用这些值的更高级别函数,需要在两者之间键入casting。
  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]);

}