你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AD5420为嘛没输出(STM32)

[复制链接]
sailorx 提问时间:2016-12-6 22:09 /
大家帮看看,到底哪出问题了,折腾一周有余了。AD5420驱动代码如下:
#include "stm32f10x.h"
#include "SPI1.H"



void for_delay(u32 delay_time)
{       
        u32 i=0;
        for(i=0; i<delay_time;i++);
}




/*******************************************************************************
* º¯ÊýÃû³Æ: SPI_COM_Init()
* ¹¦ÄÜÃèÊö: SPI³õʼ»¯ ¸ù¾Ýºê¶¨Òå½øÐÐÑ¡Ôñ--ͨ³£ÊÇSPI1
* ÊäÈë²ÎÊý: void
* ·µ»Ø²ÎÊý: ÎÞ
********************************************************************************/
void SPI_GPIO_Init(void)
{


  //       SPI_InitTypeDef  SPI_InitStructure;
          GPIO_InitTypeDef  GPIO_InitStructure;
       
          /* Enable SPI1 and GPIO clocks */
              RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
          /*!< SPI_FLASH_SPI Periph clock enable */
//         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

                /*!< Configure SPI pins: SCK */
                GPIO_InitStructure.GPIO_Pin   = SPI_SCK_PIN|SPI_MOSI_PIN;
          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOA, &GPIO_InitStructure);

                /*!< Configure AD5420 latch */
          GPIO_InitStructure.GPIO_Pin   =  SPI1_CS ;
          GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
          GPIO_SetBits(GPIOA,SPI1_CS);  
                                       

                                       
}
/********************************************************
º¯ÊýÃû³Æ£º miran_spi1_init
¹¦ÄÜÃèÊö:  ³õʼ»¯SPI1
²ÎÊý˵Ã÷£º
·µ»Ø˵Ã÷£º
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË:
Éè¼Æʱ¼ä£º
********************************************************/
void miran_spi1_init(void)
{
        SPI_InitTypeDef   SPI_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
       
        SPI_Cmd(SPI1, DISABLE);            
        SPI_I2S_DeInit(SPI1);
       

        /* SPIy Config -------------------------------------------------------------*/
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;                                       
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI1, &SPI_InitStructure);

        SPI_Cmd(SPI1, ENABLE);       
}



/********************************************************
º¯ÊýÃû³Æ£º SPI1_SEND_DATA
¹¦ÄÜÃèÊö:  ·¢ËÍ8λÊý¾Ý
²ÎÊý˵Ã÷£º data Òª·¢Ë͵ÄÊý¾ÝÖµ
·µ»Ø˵Ã÷£º
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
void SPI1_SEND_DATA(u8 data)
{
        SPI_I2S_SendData(SPI1, data);
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);       

}


/********************************************************
º¯ÊýÃû³Æ£º ADC5420_WRITE_DATA
¹¦ÄÜÃèÊö:  ÅäÖüĴæÆ÷
²ÎÊý˵Ã÷£º regist ¼Ä´æÆ÷µØÖ·,  data Êý¾Ý
·µ»Ø˵Ã÷£º
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
void ADC5420_WRITE_DATA(u8 regist, u16 data)
{
//        GPIO_ResetBits(GPIOA, SPI1_CS);     //cs  ÖõÍ
//        SPI1_SEND_DATA(regist);                                //5420 ¼Ä´æÆ÷µØÖ·
//        SPI1_SEND_DATA(data>>8);                        //¸ß×Ö½Ú
//        SPI1_SEND_DATA(data);                                //µÍ×Ö½Ú
//       
//        for_delay(100);
//        GPIO_SetBits(GPIOA, SPI1_CS);       //cs  Öøß
        unsigned char  data_low,data_high;
        data_low = data &0xFF;
        data_high = (data >>8) &0xff;
        GPIO_SetBits(GPIOA, SPI1_CS);
        for_delay(40);
        SPI1_SEND_DATA(regist);                                //5420 ¼Ä´æÆ÷µØÖ·
        SPI1_SEND_DATA(data_high);                        //¸ß×Ö½Ú
        SPI1_SEND_DATA(data_low);                                //µÍ×Ö½Ú
    GPIO_ResetBits(GPIOA, SPI1_CS);      
        for_delay(100);
        GPIO_SetBits(GPIOA, SPI1_CS);       //cs  Öøß
}


/********************************************************
º¯ÊýÃû³Æ£º ADC5420_init
¹¦ÄÜÃèÊö:  ÅäÖüĴæÆ÷
²ÎÊý˵Ã÷£º regist ¼Ä´æÆ÷µØÖ·,  data Êý¾Ý
·µ»Ø˵Ã÷£º
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
void ADC5420_init()
{
        ADC5420_WRITE_DATA(0X56,0X0001);
        for_delay(100);
        ADC5420_WRITE_DATA(0X55,0X2015);
        ADC5420_WRITE_DATA(0X55,0X1000);
        ADC5420_WRITE_DATA(0X01,0X1166);
       
}

/********************************************************
º¯ÊýÃû³Æ£º ADC5420_RECIVE_DATA
¹¦ÄÜÃèÊö:  ¶ÁADC5420¶ÔÓ¦µÄ¼Ä´æÆ÷Öµ
²ÎÊý˵Ã÷£º SPIx SPI½Ó¿Ú,  regist  ÐèÒª¶Á5420µÄ¼Ä´æÆ÷µØÖ·±àºÅ
·µ»Ø˵Ã÷£º ·µ»Ø16λµÄ5420µÄ¼Ä´æÆ÷Öµ
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
u32 ADC5420_RECIVE_DATA(SPI_TypeDef* SPIx, u8 regist)
{
        u32 data=0;
       
        GPIO_ResetBits(GPIOA, SPI1_CS);     //cs  Öõ͠      
        for_delay(5);
        SPI1_SEND_DATA(0x02);
        SPI1_SEND_DATA(0X00);
        SPI1_SEND_DATA(regist);       
        for_delay(100);
        GPIO_SetBits(GPIOA, SPI1_CS);       //cs  Öøß
        for_delay(50);
       
        GPIO_ResetBits(GPIOA, SPI1_CS);     //cs  Öõ͠      
        SPI1_SEND_DATA(0X00);
        for_delay(150);
        data|= (SPI_I2S_ReceiveData(SPIx)&0x00FF)<<16;
        SPI1_SEND_DATA(0X00);
        for_delay(150);
        data|= (SPI_I2S_ReceiveData(SPIx)&0x00FF)<<8;
        SPI1_SEND_DATA(0X00);
        for_delay(150);
        data|= (SPI_I2S_ReceiveData(SPIx)&0x00FF);       
        data=data&0x00ffff;       
        for_delay(100);
        GPIO_SetBits(GPIOA, SPI1_CS);       //cs  Öøß

        for_delay(150);
        return data;
}



/********************************************************
º¯ÊýÃû³Æ£º Ma_to_ADC5420
¹¦ÄÜÃèÊö:  °ÑMAֵת»»³ÉÒªÊäÈëµÄADCÖµ
²ÎÊý˵Ã÷£º MAÖµ ·¶Î§4~20
·µ»Ø˵Ã÷£º ¶ÔÓ¦µÄADCÖµ
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
u16 Ma_to_ADC5420(float MA)
{
        u16 adc=0;
       
        adc=(u16)(((MA)*65535)/24);                        //  (((MA)*65535)/24)     (((MA-4)*65535)/16)

        return adc;
}


/********************************************************
º¯ÊýÃû³Æ£ºADC5420_CLEAR
¹¦ÄÜÃèÊö:  CLEARΪ¸ßµçƽÓÐЧÇåÁ㣬Êä³öµçÁ÷ÇåÁãÖÁ±à³Ì·¶Î§µÄµ×²¿
²ÎÊý˵Ã÷£º
·µ»Ø˵Ã÷£º
ÌØÊâ˵Ã÷:
Éè ¼Æ ÈË£º
Éè¼Æʱ¼ä£º
********************************************************/
void ADC5420_CLEAR(void)
{
        GPIO_SetBits(GPIOA, CLEAR);
        for_delay(50000);
        GPIO_ResetBits(GPIOA, CLEAR);
}

main函数如下:
int main(void)
{
  Stm32_Clock_Init(9);
  delay_init(72);
  LED_GPIO_Config();
  SPI_GPIO_Init();
  miran_spi1_init();
  ADC5420_init();

  while (1)
  {
     Ma_to_ADC5420(10.00);
                  
  }
}



AD5420电路

AD5420电路
收藏 1 评论7 发布时间:2016-12-6 22:09

举报

7个回答
sailorx 回答时间:2016-12-6 22:10:27
到底软件问题还是硬件的,没检查出来,有用过的进来指导下
creep 回答时间:2016-12-6 22:24:05
1、先用示波器或逻辑分析仪看下SPI波形是否是否有问题2、检查下AD5420的初始化是否正确3、隔壁论坛有个代码不知道你有没有参考过:AD5420

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

sailorx 回答时间:2016-12-6 23:08:53
好的,看来只能一步一步慢慢来了
feiante 回答时间:2016-12-7 09:53:24
AD5420原来用过,等我找找程序,其实你只要按照ADI的例子写就可以了

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

sailorx 回答时间:2016-12-8 22:13:53
谢谢楼上的了,我也参考过好多的例程,可就是不行,也不知道硬件电路有没问题没?
sailorx 回答时间:2016-12-15 16:15:35
找出原因了,应该是片子的问题,换了AD5410就有4mA的输出,之前的两片AD5420都没有配置成功

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

tust15213203 回答时间:2019-3-19 11:12:01
请问5420驱动要怎么烧写进去?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版