ADS1256+SPI读取出来的数据是固定值,错在哪里呢

2019-07-20 21:44发布

[mw_shl_code=c,true]int main(void)
{
       
        unsigned char i=0;
        long ulResult;
        long double ldVolutage;

        u8 t;
        u8 len;       
        u16 times=0;  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏȼ¶·Ö×é2
        delay_init(168);                //ÑÓʱ³õʼ»¯
        uart_init(115200);        //´®¿Ú³õʼ»¯²¨ÌØÂÊΪ115200
        LED_Init();                                  //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú  
       
        Init_ADS1256_GPIO(); //³õʼ»¯ADS1256 GPIO¹Ü½Å
       
        GPIO_SetBits(GPIOB, GPIO_Pin_12 );
       
        ADS1256_Init();
        printf("ads³õʼ»¯ ");
       
        while(1)
        {
                       
                for(i = 0;i < 8;i++)
                {
                         ulResult = ADS_sum( (i << 4) | ADS1256_MUXN_AINCOM);       
                        //ulResult = ADS_sum( ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM);       
                        if( ulResult & 0x800000 )
                        {
                                 ulResult = ~(unsigned long)ulResult;
                                ulResult &= 0x7fffff;
                                ulResult += 1;
                                ulResult = -ulResult;
                        }
               
                        ldVolutage = (long double)ulResult*0.59604644775390625;

                        printf("&#181;&#218;%d&#205;¨&#181;&#192;:",(i & 0x07)?(i & 0x07) - 1:7);
                        printf("%lf",ldVolutage);         //double
                        printf("uV ");

                        //printf("%x",(unsigned long)ulResult);//16
                        delay_us(100);
                }
               
        }
}




void SPI2_Init(void)
{
SPI_InitTypeDef  SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/****Initial SPI2******************/

/* Enable SPI2 and GPIOB clocks */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);



/* Configure SPI2 pins: NSS, SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//&#205;&#198;&#205;ì&#202;&#228;&#179;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//&#201;&#207;&#192;&#173;
GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2); //PB3&#184;&#180;&#211;&#195;&#206;&#170; SPI1
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2); //PB4&#184;&#180;&#211;&#195;&#206;&#170; SPI1
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2); //PB5&#184;&#180;&#211;&#195;&#206;&#170; SPI1


//SPI2 NSS
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//&#205;&#198;&#205;ì&#202;&#228;&#179;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB, GPIO_Pin_12);

  /* SPI2 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1&#201;è&#214;&#195;&#206;&#170;&#193;&#189;&#207;&#223;&#200;&#171;&#203;&#171;&#185;¤
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                    //&#201;è&#214;&#195;SPI2&#206;&#170;&#214;÷&#196;&#163;&#202;&#189;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI·&#162;&#203;&#205;&#189;&#211;&#202;&#213;8&#206;&#187;&#214;&#161;&#189;á&#185;&#185;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                   //&#180;&#174;&#208;&#208;&#202;±&#214;&#211;&#212;&#218;&#178;&#187;&#178;&#217;×÷&#202;±&#163;&#172;&#202;±&#214;&#211;&#206;&#170;&#181;&#205;&#181;&#231;&#198;&#189;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                 //&#181;&#218;&#210;&#187;&#184;&#246;&#202;±&#214;&#211;&#209;&#216;&#191;&#170;&#202;&#188;&#178;&#201;&#209;ù&#202;&#253;&#190;&#221;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                  //NSS&#208;&#197;&#186;&#197;&#211;&#201;&#200;í&#188;&#254;&#163;¨&#202;&#185;&#211;&#195;SSI&#206;&#187;&#163;&#169;&#185;&#220;&#192;í
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //&#182;¨&#210;&#229;&#178;¨&#204;&#216;&#194;&#202;&#212;¤·&#214;&#198;&#181;&#181;&#196;&#214;&#181;:&#178;¨&#204;&#216;&#194;&#202;&#212;¤·&#214;&#198;&#181;&#214;&#181;&#206;&#170;8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;       //&#202;&#253;&#190;&#221;&#180;&#171;&#202;&#228;&#180;&#211;MSB&#206;&#187;&#191;&#170;&#202;&#188;
SPI_InitStructure.SPI_CRCPolynomial = 7;         //CRC&#214;&#181;&#188;&#198;&#203;&#227;&#181;&#196;&#182;à&#207;&#238;&#202;&#189;
SPI_Init(SPI2, &SPI_InitStructure);
/* Enable SPI2  */
SPI_Cmd(SPI2, ENABLE);  
printf("SPI&#179;&#245;&#202;&#188;&#187;&#175; ");
}  

//&#179;&#245;&#202;&#188;&#187;&#175;ADS1256 GPIO
void Init_ADS1256_GPIO(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_ADS1256Reset | RCC_ADS1256DRDY, ENABLE);

          GPIO_InitStructure.GPIO_Pin = GPIO_RCC_ADS1256Reset;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//&#205;&#198;&#205;ì&#202;&#228;&#179;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
          GPIO_Init(GPIO_RCC_ADS1256Reset_PORT, &GPIO_InitStructure);  
          GPIO_ResetBits(GPIO_RCC_ADS1256Reset_PORT, GPIO_RCC_ADS1256Reset );


        GPIO_InitStructure.GPIO_Pin = GPIO_ADS1256DRDY;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//&#184;&#180;&#211;&#195;&#185;&#166;&#196;&#220;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//&#205;&#198;&#205;ì&#202;&#228;&#179;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
          GPIO_Init(GPIO_ADS1256DRDY_PORT, &GPIO_InitStructure);  

        SPI2_Init();
        printf("GPIO&#179;&#245;&#202;&#188;&#187;&#175; ");
}


//-----------------------------------------------------------------//
//        &#185;&#166;    &#196;&#220;&#163;&#186;  &#196;&#163;&#196;&#226;SPI&#205;¨&#208;&#197;
//        &#200;&#235;&#191;&#218;&#178;&#206;&#202;&#253;: /        ·&#162;&#203;&#205;&#181;&#196;SPI&#202;&#253;&#190;&#221;
//        &#179;&#246;&#191;&#218;&#178;&#206;&#202;&#253;: /        &#189;&#211;&#202;&#213;&#181;&#196;SPI&#202;&#253;&#190;&#221;
//        &#200;&#171;&#190;&#214;±&#228;&#193;&#191;: /
//        ±&#184;    ×&#162;:         ·&#162;&#203;&#205;&#189;&#211;&#202;&#213;&#186;&#175;&#202;&#253;
//-----------------------------------------------------------------//
unsigned char SPI_WriteByte(unsigned char TxData)
{
  unsigned char RxData=0;
       

  while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET); //                                                   
  SPI_I2S_SendData(SPI2,TxData);

   while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);

   RxData=SPI_I2S_ReceiveData(SPI2);

    return RxData;
        printf("&#196;&#163;&#196;&#226;SPI&#205;¨&#208;&#197; ");
       
}

//-----------------------------------------------------------------//
//        &#185;&#166;    &#196;&#220;&#163;&#186;ADS1256 &#208;&#180;&#202;&#253;&#190;&#221;
//        &#200;&#235;&#191;&#218;&#178;&#206;&#202;&#253;: /
//        &#179;&#246;&#191;&#218;&#178;&#206;&#202;&#253;: /
//        &#200;&#171;&#190;&#214;±&#228;&#193;&#191;: /
//        ±&#184;    ×&#162;: &#207;òADS1256&#214;&#208;&#181;&#216;&#214;·&#206;&#170;regaddr&#181;&#196;&#188;&#196;&#180;&#230;&#198;÷&#208;&#180;&#200;&#235;&#210;&#187;&#184;&#246;×&#214;&#189;&#218;databyte
//-----------------------------------------------------------------//
void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
{
    GPIO_ResetBits(GPIOB, GPIO_Pin_12);
        while(GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY));//&#181;±ADS1256_DRDY&#206;&#170;&#181;&#205;&#202;±&#178;&#197;&#196;&#220;&#208;&#180;&#188;&#196;&#180;&#230;&#198;÷
        //&#207;ò&#188;&#196;&#180;&#230;&#198;÷&#208;&#180;&#200;&#235;&#202;&#253;&#190;&#221;&#181;&#216;&#214;·
    SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F));
    //&#208;&#180;&#200;&#235;&#202;&#253;&#190;&#221;&#181;&#196;&#184;&#246;&#202;&#253;n-1
    SPI_WriteByte(0x00);
    //&#207;òregaddr&#181;&#216;&#214;·&#214;&#184;&#207;ò&#181;&#196;&#188;&#196;&#180;&#230;&#198;÷&#208;&#180;&#200;&#235;&#202;&#253;&#190;&#221;databyte
    SPI_WriteByte(databyte);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);
        printf("ADS1256 &#208;&#180;&#202;&#253;&#190;&#221; ");
}


//&#179;&#245;&#202;&#188;&#187;&#175;ADS1256
void ADS1256_Init(void)
{
        ADS1256WREG(ADS1256_STATUS,0x06);               // &#184;&#223;&#206;&#187;&#212;&#218;&#199;°&#161;&#162;&#208;&#163;×&#188;&#161;&#162;&#202;&#185;&#211;&#195;&#187;&#186;&#179;&#229;
//        ADS1256WREG(ADS1256_MUX,0x08);                  // &#179;&#245;&#202;&#188;&#187;&#175;&#182;&#203;&#191;&#218;A0&#206;&#170;&#161;&#174;+&#161;&#175;&#163;&#172;AINCOM&#206;&#187;&#161;&#174;-&#161;&#175;
        ADS1256WREG(ADS1256_ADCON,0x00);                // ·&#197;&#180;ó±&#182;&#202;&#253;1
        ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS);  // &#202;&#253;&#190;&#221;5sps
        ADS1256WREG(ADS1256_IO,0x00);
printf("&#179;&#245;&#202;&#188;&#187;&#175;ADS1256 ");       
}

//&#182;&#193;&#200;&#161;AD&#214;&#181;
unsigned int ADS1256ReadData()  
{
    unsigned char i=0;
    unsigned int sum=0;
        unsigned int r=0;
        GPIO_ResetBits(GPIOB, GPIO_Pin_12);;

        while(GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY));               //&#181;±ADS1256_DRDY&#206;&#170;&#181;&#205;&#202;±&#178;&#197;&#196;&#220;&#208;&#180;&#188;&#196;&#180;&#230;&#198;÷
//        ADS1256WREG(ADS1256_MUX,channel);                //&#201;è&#214;&#195;&#205;¨&#181;&#192;
        SPI_WriteByte(ADS1256_CMD_SYNC);
        SPI_WriteByte(ADS1256_CMD_WAKEUP);                      
        SPI_WriteByte(ADS1256_CMD_RDATA);

           sum |= (SPI_WriteByte(0xff) << 16);
        sum |= (SPI_WriteByte(0xff) << 8);
        sum |= SPI_WriteByte(0xff);

        GPIO_SetBits(GPIOB, GPIO_Pin_12);
    return sum;
        printf("&#182;&#193;&#200;&#161;AD&#214;&#181; ");
}


//-----------------------------------------------------------------//
//        &#185;&#166;    &#196;&#220;&#163;&#186;&#182;&#193;&#200;&#161;ADS1256&#181;&#165;&#194;·&#202;&#253;&#190;&#221;
//        &#200;&#235;&#191;&#218;&#178;&#206;&#202;&#253;: /
//        &#179;&#246;&#191;&#218;&#178;&#206;&#202;&#253;: /
//        &#200;&#171;&#190;&#214;±&#228;&#193;&#191;: /
//        ±&#184;    ×&#162;: /
//-----------------------------------------------------------------//
unsigned int ADS_sum(unsigned char channel)
{
        ADS1256WREG(ADS1256_MUX,channel);                //&#201;è&#214;&#195;&#205;¨&#181;&#192;
        return ADS1256ReadData();//&#182;&#193;&#200;&#161;AD&#214;&#181;&#163;&#172;·&#181;&#187;&#216;24&#206;&#187;&#202;&#253;&#190;&#221;&#161;&#163;
                printf("&#182;&#193;&#200;&#161;ADS1256&#181;&#165;&#194;·&#202;&#253;&#190;&#221; ");
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。