问题描述:配置好SPI后,然后通过SPI给AS3956芯片收发数据,第一次正常收发成功。
但后续的收发,则接收数据均为0X00(第一次调试,图见后面)。
复位后,继续调试,接收的数据均为0xFF(第二次调试,图见后面)。
谁知道这个问题的解决方案吗?
下面是我的代码:
/* 宏定义 */
#define CS_LOW() { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);}
#define CS_HIGH() { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);}
/* 收发数据 */
CS_LOW();
if(HAL_OK==HAL_SPI_TransmitReceive(&hspi1,&pTxData1,&pRxData2,1, 10))
{
if(HAL_OK!=HAL_SPI_TransmitReceive(&hspi1,(uint8_t *)0xff,&pRxData1,1, 10))
{
return -1;
}
}
CS_HIGH();
CS_LOW();
if(HAL_OK!=HAL_SPI_TransmitReceive(&hspi1,&pTxData2,&pRxData2,1, 10))
{
return -1;
}
CS_HIGH();
CS_LOW();
if(HAL_OK!=HAL_SPI_TransmitReceive(&hspi1,&pTxData3,&pRxData2,1, 10))
{
return -1;
}
CS_HIGH();
/* SPI1 parameter configuration*/
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 7;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}