我试图使用 SPI 通信将我的 STM 发现板与 MAX31856 通信。根据数据表,我应该先发送地址字节,然后是数据字节。我目前能够写入寄存器,但是当我尝试读取写入寄存器的数据时,除非我只发送读取命令,否则我无法读取数据。
例如:
http://puu.sh/E2gJD.png 使用此代码,我可以读取默认寄存器值。
http://puu.sh/E2gLC.png 使用此代码,我可以将新值写入 CR0 和 CR1 寄存器。第一个 0x80 值是寄存器 CR0 的地址字节。下一个值是新的寄存器值 0x80 和 0x37。
http://puu.sh/E2gNK.png 我停止了之前的程序并将我的代码更改为这个程序。然后我开始调试。从这张图可以看出,CR0和CR1寄存器的值都变成了我们之前写的。
最后; http://puu.sh/E2gRw.png 当我尝试结合这两个操作,写入和读取时,我无法读取我写入寄存器的内容。需要一些帮助来解决这个问题。
uint8_t spiTXData[17],spiRXData[17],spiTXDataR[17], spiRXDataR[17];
/* USER CODE END 0 */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DAC_Init();
MX_SPI1_Init();
/* USER CODE BEGIN 2 */
// HAL_Delay ( 1 ) ;
//
// HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
// spiTXDataR[0] = 0x00;
// HAL_SPI_TransmitReceive(&hspi1, spiTXDataR, spiRXDataR, 3, 50);
// HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
// HAL_Delay ( 1 ) ;
spiTXData[0] = 0x80;
spiTXData[1] = 0x80;
spiTXData[2] = 0x37;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, spiTXData, spiRXData, 3, 50);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
spiTXDataR[0] = 0x00;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, spiTXDataR, spiRXDataR, 17, 50);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
我需要能够读取稍后写入 CR0 和 CR1 寄存器的命令。我怎样才能做到这一点?我希望你能理解我的问题并能够帮助我。谢谢。