我刚刚开始对 STM32 进行编程,并使用 CubeMX 生成了一个代码,用于与陀螺仪 (L3GD20) 进行 SPI 通信。我对 HAL_SPI 命令有疑问。
我首先尝试读取WHO_AM_I返回良好响应(0xD4)的寄存器,然后我尝试对寄存器执行相同的操作CTRL_REG1,返回(0x07)仍然很好。
但是,如果我尝试一个接一个地获取它们,则会HAL_SPI_Receive不断发送第一个代码的数据HAL_SPI_Transmit...尝试为其提供其他缓冲区,但仍然不起作用。
这是我感兴趣的代码部分:
uint8_t txData[8],rxData[8]; //Buffers for the first read.
uint8_t rBuffer[8]; //Buffer for the second read.
/*...............................................................
*...............................................................
*...............................................................
*/...............................................................
txData[0] = ADDR_WHO_AM_I | 0x80;
HAL_SPI_Transmit(&hspi2, txData, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi2, rxData, 1, HAL_MAX_DELAY); //Returns the right value
HAL_Delay(1000);
txData[0] = ADDR_CTRL_REG1 | 0x80;
HAL_Delay(500);
HAL_SPI_Transmit(&hspi2, txData, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi2, rBuffer, 1, HAL_MAX_DELAY); //Returns the same value...
HAL_Delay(1000);
Run Code Online (Sandbox Code Playgroud)
PS:我还想了解更多有关HAL_SPI_TransmitReceive如果可能的话,我应该如何使用它来执行相同的任务?(从不同的寄存器读取 …