已回答假定已回答

AD7934为什么不能启动转换通过仿真发现,CONVST置低后,AD7934并没有启动转换,使BUSY信号变为高电平。

472607042@QQ.com 在 2014-8-21 詢問的問題
最後回覆由ADI_Wei於2014-8-26提供

我采用STM32驱动AD7934芯片,一直不能读出AD值。

时钟我采用的STM32内部输出输出,频率为8M。通过仿真发现,CONVST置低后,AD7934并没有启动转换,使BUSY信号变为高电平。

驱动程序如下:请大神帮忙指点迷津!谢谢

/****************************************************************************

* 名    称:uint16_t Read_AD7934()

* 功    能:读 AD7934          通道的AD值

* 入口参数:无

* 出口参数:无

* 说    明:

* 调用方法:无

****************************************************************************/

uint16_t Read_AD7934(uint8_t CH)

{

          uint16_t AD_Temp;

          GPIO_InitTypeDef GPIO_InitStructure;

 

          GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_All;       //所有GPIO为同一类型端口

          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;   //推挽输出模式                              上拉输入GPIO_Mode_IPU

          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOD, &GPIO_InitStructure);

          AD7934_CONVST_H;

          AD7934_RD_H;

          AD7934_WB_H;                              // WB置一

          AD7934_CS_H;

          AD7934_WR_H;

          AD7934_DATA =   (uint16_t)(0x0001 | CH<<5);  //写地址 0x0121;  //

          NOP();// NOP();

          AD7934_CS_L;

          AD7934_WR_L;

          NOP(); //NOP();                               

          AD7934_WR_H;

          AD7934_CS_H;

 

          GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_All;       //所有GPIO为同一类型端口

          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;      //推挽输出模式GPIO_Mode_Out_PP                              上拉输入

          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOD, &GPIO_InitStructure);

AD7934_CONVST_H;

          AD7934_CS_H;

/AD7934_RD_H; 

          AD7934_CONVST_L;     //启动转换

          NOP();

          while(!(AD7934_BUSY_read));

          NOP();

          while(AD7934_BUSY_read);

          AD7934_CONVST_H;

          AD7934_CS_L;

          AD7934_RD_L;

          //Delay(0x5);

          AD_Temp = AD7934_DATA & 0xfff;

          NOP(); NOP();

          AD7934_RD_H;

          AD7934_CS_H;

 

          return AD_Temp;

}

結果