已回答假定已回答

AD7606芯片SPI串行通信

xabtdl@163.com 在 2017-7-19 詢問的問題
最後回覆由xabtdl@163.com於2017-7-26提供

MCU是STM32F407,使用SPI与7606通信。

SPI初始化:

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly;  //1线接收模式

  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;   //作为主机使用

  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;   //数据长度16

  SPI_InitStructure.SPI_CPOL  = SPI_CPOL_High;

  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;   //软件设置NSS功能

  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

  SPI_InitStructure.SPI_CRCPolynomial = 7;

  SPI_Init(SPI3,&SPI_InitStructure);

接收数据:

  AD7606_CS_Port(PORT_LOW);

  SPI_Cmd(SPI_PORT,ENABLE); //使能SPI3

 

 

#if 0

  while(RESET == SPI_I2S_GetFlagStatus(SPI_PORT,SPI_I2S_FLAG_TXE));

  SPI_I2S_SendData(SPI_PORT,TempU16Data);

#endif 

  while(RESET == SPI_I2S_GetFlagStatus(SPI_PORT,SPI_I2S_FLAG_RXNE))

  {

    Count++;

    if(Count>1000)

    {

      return 0xB9;

    }

  }

  TempU16Data = SPI_I2S_ReceiveData(SPI_PORT);

  *RxData = TempU16Data;

 

  SPI_Cmd(SPI_PORT,DISABLE); //使能SPI3

  AD7606_CS_Port(PORT_HIGH);

问题是:

SPI波特率低的情况下采样值正确,波特率高,采样值就不准了。

1) ad_start  2)busy  3)cs 4)sclk 5)miso

其中一路采样值增加,会影响其他采样值。请专家给予解决方案或者技术支持。谢谢。

 

疑问:1、AD7606-4串行通信最快速率是多少?我测试怎么才能达到600k呢?

            2、AD7606-4引脚30接上拉电阻对串行通信有什么影响?

            3、MCU的SPI在初始化的时候就使能,再转换数据,检测busy变化后取数据,为什么MCU的RXNE在片选拉低瞬间就会置位呢?

結果