工具与软件:
我将使用 STM32读取和写入 DAC60504的寄存器。 我第一次尝试读取器件 ID、但得到的响应仅为0x00000000。 我的 SPI 配置为16位字大小和 MSB 第一位顺序。
我读取寄存器的函数是
uint16_t DAC60504_ReadRegister (uint8_t reg){
uint16_t txData1、txData2;
uint16_t rxData1、rxData2;
uint16_t 结果= 0;
//构造24位读取命令(分为两个16位字)
txData1 =(DAC60504_CMD_READ |(reg & 0x0F));//第一个16位字(命令+地址)
txData2 = 0x0000;//虚拟数据以完成24位帧
//第一个 SPI 事务(发送读取命令)
DAC60504_CS_LOW ();
HAL_SPI_TRANSMIT (&hspi3、(uint8_t*)&txData1、1、HAL_MAX_DELAY);
HAL_SPI_TRANSMIT (&hspi3、(uint8_t*)&txData2、1、HAL_MAX_DELAY);
DAC60504_CS_HIGH ();
HAL_DELAY (1);//确保满足时序要求
//第二个 SPI 事务(读取响应)
txData1 = 0x0000;//虚拟数据
txData2 = 0x0000;
DAC60504_CS_LOW ();
HAL_SPI_RECEIVE (&hspi3、(uint8_t*)&rxData1、1、HAL_MAX_DELAY);
HAL_SPI_RECEIVE (&hspi3、(uint8_t*)&rxData2、1、HAL_MAX_DELAY);
DAC60504_CS_HIGH ();
//提取16位数据
Result = rxData2;//最后16位包含实际数据
返回结果;
}
请帮助我解决此问题。