Я просто получаю 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
}

0 ответов

Другие вопросы по тегам