我正在尝试通过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 error\r\n");
}
while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY) { }
if (HAL_SPI_Receive(&hspi1,r,1,20) != HAL_OK)
{
printf("Receive error\r\n");
}
// printf("i2=%x s[0]=%x r[0]=%x r[1]=%x \r\n",i,s[0],r[0],r[1]);
ucResult=r[0];
return ucResult;
如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
实际上,第一次读取是可以的,并且在复位之后我可以读取一次VersionReg。 但是即使我将其放入循环中,也只有第一次读取就可以了(0x92),而其他读取了(0xee),这就是我发送给它的东西。