You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32H743 SPI接收传感器数据:如何提取SensorRXBuff[1]字节?

解决STM32H743 SPI接收数据中提取第二个字节的问题

首先要确保SensorRXBuff是长度至少为3的uint8_t类型数组,如果尚未定义,需要在函数外部或内部声明:

uint8_t SensorRXBuff[3]; // 可声明为全局变量或函数内的局部变量,确保能容纳3个接收字节

在SPI收发完成后,直接通过数组下标SensorRXBuff[1]即可获取第二个接收字节,你可以将其赋值给变量,或者直接参与计算。同时注意现有代码中SensorTxBuff的类型问题:你定义的是uint16_t数组,但HAL_SPI_TransmitReceive要求传入uint8_t*指针,强制转换可能引发字节序问题(比如0x8会被拆分为0x08和0x00发送),建议改成uint8_t数组更符合SPI字节收发的逻辑。

修改后的完整代码示例:

// 先确保SensorRXBuff的定义
uint8_t SensorRXBuff[3];

void Sensor(uint8_t *ch)
{
    // 改为uint8_t数组,对应要发送的3个字节(根据传感器协议补充第三个字节,无需则设为0)
    uint8_t SensorTxBuff[3] = {0x08, 0xAF, 0x00};
    uint8_t secondRxByte; // 存储提取的第二个接收字节
    
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); // 替换为你的实际CS引脚参数,拉低CS
    if (HAL_SPI_TransmitReceive(&hspi1, SensorTxBuff, SensorRXBuff, 3, 100) != HAL_OK)
    {
        Error_Handler();
    }
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); // 拉高CS
    
    // 提取第二个接收字节
    secondRxByte = SensorRXBuff[1];
    
    // 在这里添加你的计算逻辑,示例:
    *ch = secondRxByte; // 通过参数返回提取的字节
    // 若需组合多字节计算,比如和第三个字节拼接成ADC值:
    // uint16_t adcResult = (secondRxByte << 8) | SensorRXBuff[2];
}

关键说明

  • 数组下标从0开始计数,因此SensorRXBuff[0]对应第一个接收字节,SensorRXBuff[1]就是你需要的第二个字节,直接访问即可。
  • 如果传感器仅要求发送2个字节,需同步调整HAL_SPI_TransmitReceive的长度参数为2,同时修改SensorTxBuff为uint8_t[2],避免发送越界的无效数据。

内容的提问来源于stack exchange,提问作者Stan woldes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:41