0

我正在使用 STM32F407,只想翻译 Arduino SPI.transfer() 函数。

从 IC 发送 4 个字节后,我想接收 8 个字节。据我了解,传输是正确的,但我使用的 HAL_SPI_TransmitReceive 函数不会导致缓冲区在错误的时间或错误的数据读取数据。

在这里你可以看到我的传输: 逻辑分析仪

接收从逻辑分析仪读取的字节:0xc6、0x52、0x17、0xA4、0x00、0x30、0x04、0x8E

这里是我的控制台日志的字节:0xc2、0x00、0x03、0x80、0x00、0x10、0x00、0x86

我不知道为什么读数不一样。

这些是我的写/接收功能:

    void spi_write(uint8_t data)  // Byte to be written to SPI port
    {
        HAL_SPI_Transmit(&hspi1, &data, 1, 1);
    }
    
    int8_t spi_read(uint8_t  data) //!The data byte to be written
    {
        uint8_t spi_buf;
        if(HAL_SPI_TransmitReceive(&hspi1, &data, &spi_buf, 1, 10)){
            SPI_Error_Handler();
        }
        return spi_buf;
    }    
        
    void spi_write_read(uint8_t tx_Data[],//array of data to be written on SPI port
                            uint8_t tx_len, //length of the tx data arry
                            uint8_t *rx_data,//Input: array that will store the data read by the SPI port
                            uint8_t rx_len //Option: number of bytes to be read from the SPI port
                           )
        {
            for (uint8_t i = 0; i < tx_len; i++)
              {
                spi_write(tx_Data[i]);
              }
        
            for (uint8_t i = 0; i < rx_len; i++)
            {
                rx_data[i] = spi_read(0xFF);
            }
    }

在 Arduino 板上,通过使用 SPI.transfer 而不是我的 spi_write/read,代码可以正常工作。

4

0 回答 0