Я просто получаю 0xFF от PN532 при использовании HAL_SPI_Receive с stm32f103
Я использую SPI для связи между stm32f103 и PN532. Я использую SPI1 со следующими настройками:
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_8;
hspi1.Init.FirstBit = SPI_FIRSTBIT_LSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
тогда я отправляю getFirmwareVersion
командовать PN532
от HAL_SPI_Transmit
,
После этого, когда я хочу получить ответ по HAL_SPI_Receive, я просто получаю 0xff
, Я не знаю, где я не прав.
(PB6 для NSS) Вот мой код:
uint8_t buffer[20];
uint8_t command[1];
void getFrameVersion(){
volatile int z = 1;
volatile int q = -1;
//send command
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_RESET); // choose pn532 as slave.
command[0] = 0x01;
HAL_SPI_Transmit(&hspi1 , command , sizeof(command) , 1000);
uint8_t arr[] = {0x00 , 0x00 , 0xFF , 0x02 , 0xFE , 0xD4 , 0x02 , 0x2A , 0x00}; // get frame version
for(int i = 0 ; i < sizeof(arr) ; ++i){
command[0] = arr[i];
HAL_SPI_Transmit(&hspi1 , command , sizeof(command) , 1000);
}
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_SET); // unchoosing pn532 as slave
for(int i = 0 ; i < 1000 ; i++)
;
//reading status
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_RESET); // choose pn532 as slave.
for(int i = 0; i < 1000 ; ++i)
;
command[0] = 0x02;
HAL_SPI_Transmit(&hspi1 , command , sizeof(command) , 1000);
//if RDY = 1 continue; ACK
do{
q = HAL_SPI_Receive(&hspi1 , buffer , 1 , 100) ;
z = buffer[0] & 1;
}while(z != 1);
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_SET); // unchoosing pn532 as slave
for(int i = 0 ; i < 1000; i++)
;
// reading response
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_RESET);
command[0] = 0x03;
HAL_SPI_Transmit(&hspi1 , command , sizeof(command) , 1000);
uint8_t arr3[14];
for(int i = 0 ;i < 100;++i)
;
for(int i = 0 ; i < sizeof(arr) ; ++i){
q = HAL_SPI_Receive(&hspi1 , &buffer[i] , 1 , 1000);
}
HAL_GPIO_WritePin(GPIOB , GPIO_PIN_6 , GPIO_PIN_SET); // unchoosing pn532 as slave
}