stm32f429里面spi的发送HAL_SPI_Transmit()函数默认是发送8bit数据,但我AD7606需要传输16bit,怎么办呢?

2019-07-20 03:35发布

问题:需要用SPI通信方式读取AD7606测的数据,AD7606是16位,所以SPI工作方式设置成为16位传输。但是,SPI的发送函数HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)是8bit传输,怎么办呢?

同时,SPI的接受函数HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)也是8bit传输。
应该编写函数呢?忘大神们指点。
下面是我写的代码,但不知道对不对,目前AD还没有调出来。

u16 AD7606_ReadBytes(void)
{

        u16 data = 0;

  /* Wait until the transmit buffer is empty*/
  while (__HAL_SPI_GET_FLAG(&SPI5_Handler,SPI_FLAG_TXE) == RESET)
  {
               
  }

  /* Send the byte */
        u16 TxData[]={0xffff};
  HAL_SPI_Transmit(&SPI5_Handler,(u8 *)TxData,sizeof(TxData),1000);
       

  /* Wait until a data is received */
  while (__HAL_SPI_GET_FLAG(&SPI5_Handler,SPI_FLAG_RXNE) == RESET)
  {
               
  }
       
        /* Get the received data */
        u8 RxData[2];
        HAL_SPI_Receive(&SPI5_Handler,RxData,2,1000);
       
        data=RxData[0];
        data <<= 8;
        data +=RxData[1];
       
  /* Return the shifted data */
  return  data;
}



求教,感谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。