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
相关产品推荐
相关产品推荐

