我正在尝试通过HAL_SPI_*()
API与mfrc522进行连接,并至少读取VersionReg
寄存器,但我想要读取的地址在数据中返回其地址,换句话说,它似乎有回声!
这是我的SPI初始化:
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_32;
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();
}
这是我读取寄存器的函数:
HAL_GPIO_WritePin(RD_SS_Port, RD_SS_Pin, GPIO_PIN_RESET);
Address=0x37;
ucAddr = ((Address<<1)&0x7E)|0x80;
// ucAddr=0xb7;
d[0]=ucAddr;
while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY) { }
if (HAL_SPI_Transmit(&hspi1,d,2,20) != HAL_OK)
{
printf("send errorrn");
}
while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY) { }
if (HAL_SPI_Receive(&hspi1,r,1,20) != HAL_OK)
{
printf("Receive errorrn");
}
// printf("i2=%x s[0]=%x r[0]=%x r[1]=%x rn",i,s[0],r[0],r[1]);
ucResult=r[0];
return ucResult;
如果有人能帮我,我将不胜感激。
实际上第一次读取是可以的,重置后我可以读取VersionReg一次。但即使我把它放在一个循环中,只有第一个读取是可以的(0x92(,其他读取(0xee(,这就是我发送给它的东西。