MCU作为SPI从机,读取数据

MCU作为SPI从机,读取数据,c,spi,master-slave,keil,hal,C,Spi,Master Slave,Keil,Hal,我有一个我无法控制的主机,它只是发送带有数据的时钟。我将stm32f4配置为全双工从机。我设法使它们与HAL功能同步: HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000); // receive 16 bytes then send them for debugg 为了调试,我从从从机发送从主机获取的字节, 而且数据是相同的,所以它完全同步,看起来就

我有一个我无法控制的主机,它只是发送带有数据的时钟。我将stm32f4配置为全双工从机。我设法使它们与HAL功能同步:

HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000);  
      // receive 16 bytes then send them for debugg
为了调试,我从从从机发送从主机获取的字节, 而且数据是相同的,所以它完全同步,看起来就像从机读取所有主数据发送。以下是图片(抱歉,无法使用stackoverflow加载,因为我的点数不足):

  • -奥西洛的形象
  • -放大
  • 问题是,我不知道如何读取该数据,它是16字节,我需要在不减慢spi速度的情况下以某种方式读取。我所有的尝试都失败了。 整个代码是:

        int main(void)
    {
      /* USER CODE BEGIN 1 */
    
    
      /* USER CODE END 1 */
    
      /* MCU Configuration----------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_DMA_Init();
      MX_USB_DEVICE_Init();
      MX_SPI1_Init();
      /* USER CODE BEGIN 2 */
      /* USER CODE END 2 */
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
            uint8_t collect_bits[16] = {0};
            char string_array[21] = {0};
            uint8_t spi_buffer[16] ={0} ;
            uint8_t flag_when_start_print = 0;
            spi_buffer[0] = 5;
            uint8_t spi_transmit[16] = {0};
    
            HAL_SPI_Init(&hspi1); //init spi
    
      while (1)
      {
      HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)spi_buffer, (uint8_t *)spi_buffer, 16, 2000);
      if (spi_buffer[0] == 0xFE) // just tring to catch 0xFE, doesnt work
    {   
        sprintf(string_array, "%X", spi_buffer[0]); // just simple convertation for PC output
    CDC_Transmit_FS((uint8_t*)string_array, sizeof(string_array));   // print result. }
        }
       }
    

    重要的一点是,我想要捕获的消息总是以0xFE0010开始,因此在这些字节之后,我需要读取接下来的13个字节

    请不要通过指向外部站点的图像链接。请将它们包含在问题中。在调用
    HAL\u spi\u TransmitReceive
    后,是否可以打印缓冲区
    spi\u buffer
    。这将指示接收到的数据,您可以看到预期的数据是否处于偏移位置,或者它与您预期的不同。此外,在不了解主机的情况下,很难说它是如何发送数据的。