OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5085|回复: 6

我用STM32F107 SPI方式采集ADC128S022的问题,采到的数据不对,我结合官网提供的M430的例子,没用过M430,

[复制链接]

38

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-12-7
在线时间
15 小时
发表于 2015-4-24 10:39:28 | 显示全部楼层 |阅读模式
5金钱
extern void Delay(vu32 nCount);
#define NUM_OF_RESULTS   8    // Number of temp sensor samples to take
#define ADC_CHANNEL      0    // ADC channel for conversion
#define SCALE_FACTOR     3    // For averaging converted samples
#define ADC12_RATIO    0.805664   // 3300/4096(3300mV ref & 12bit converter, straight binary o/p)
#define ADC_INPUT0        0
#define ADC_INPUT1        1
#define ADC_INPUT2        2
#define ADC_INPUT3        3
#define ADC_INPUT4        4
#define ADC_INPUT5        5
#define ADC_INPUT6        6
#define ADC_INPUT7        7
volatile unsigned char bdata;
unsigned char ADC_Input  = 0x00; 
unsigned char ADC_Cnt  = 0x00; 
unsigned short ADC_Data  = 0x0000;          
unsigned char ADC_Numbytes = 0x00;
unsigned char i ;

void TI_ADC128S022_Init(void)
{
   ADC_Numbytes = 16;
   ADC_Data  = 0;
   AD_CS_DISABLE();
    AD_SCLK_DISABLE();
   Delay(1000);
    AD_CS_ENABLE();
  #if 0
    switch(NUM_OF_RESULTS) 
   {  

   case 0:ADC_Input = ADC_INPUT0;    break; 

   case 1:ADC_Input = ADC_INPUT1;    break;  

   case 2:ADC_Input = ADC_INPUT2;    break;  

   case 3:ADC_Input = ADC_INPUT3;    break;  

   case 4:ADC_Input = ADC_INPUT4;    break;  

   case 5:ADC_Input = ADC_INPUT5;    break;  

   case 6:ADC_Input = ADC_INPUT6;    break;  

   case 7:ADC_Input = ADC_INPUT7;    break; 
   default:  
   break;
   }
   #endif
   ADC_Input = 0xe1;
   for(ADC_Cnt = 0; ADC_Cnt < ADC_Numbytes; ADC_Cnt++) 
    {  
     Delay(1000);   
     AD_SCLK_DISABLE();  
     if (ADC_Cnt<5)
   {
     if(ADC_Input&0x80) 
    {
     ADC_DOU_ENABLE();
    }
     else
      {
       ADC_DOU_DISABLE();
            }
      ADC_Input <<= 1;
   }
      else
      {
       ADC_DOU_DISABLE();
            }
      Delay(1000);
      AD_SCLK_ENABLE();
      Delay(1000);
           // if(ADC_Cnt >= 4 )
     // {
     //  ADC_Data <<= 1; 
           
      //if(ADC_DIN_ENABLE)
      // {
      //    ADC_Data |= 0x0001;
           //   }
      // else
      // {
        // ADC_Data &= 0xfffe;
            //  }   
 }
  // else
  // {;}
//}
    AD_CS_DISABLE();
      //AD_SCLK_ENABLE();
     // *adc_data   = ADC_Data;
    // return;  
    //    printf("%d ",ADC_Data);        //这儿打印出来的值是4095
}

void TI_ADC128S022_ADC_vout (void)
{
 uint8_t i;
  static uint16_t results[NUM_OF_RESULTS];       // To store ADC output
  static uint32_t sum_adc_data = 0;              // accumulate and avg adc results
  volatile static float vout;                    // ADC vout
 
  for(i=0; i<8;i++)
  {
    results = SPI_ReadWriteByte(ADC_CHANNEL); // read and store ADC Channel output  
    sum_adc_data += results;                  // accumulate result
    Delay(1000);                                  // acquisition time                            
  }
  sum_adc_data >>= SCALE_FACTOR;                 // Average the accumulated sum
  vout = sum_adc_data * ADC12_RATIO;             // ADC vout 
  sum_adc_data = 0;                              // Set Breakpoint here & see measured vout    
   while(1)
  {
  printf("%f ",vout);       //这儿打印值是205.444321
  Delay(5000000);
  }
}



int main(void)

 Init_Usart();
  SPI_Configuration();
 TI_ADC128S022_Init();
 TI_ADC128S022_ADC_vout();
}

问题出在哪了,这是我的程序


AD_Sample.zip

3.51 MB, 下载次数: 142

每天都是新开始
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2013-12-7
在线时间
15 小时
 楼主| 发表于 2015-4-24 10:41:12 | 显示全部楼层

这是我的SPI的配置

void SPI_Configuration(void)
{
   SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
   SystemInit();       
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA
                |RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO
                |RCC_APB2Periph_SPI1, ENABLE );

 /* Configure USART1 Rx (PB.8) as input floating  busy busy DRDY */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
 /* Configure SPI1 pins: SCK, MISO and MOSI */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //???????ì????
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Configure I/O for Flash Chip select */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  //SPI CS
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //???????ì????
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        /* Deselect the FLASH: Chip Select high */
        GPIO_SetBits(GPIOC,GPIO_Pin_5);
        GPIO_SetBits(GPIOC,GPIO_Pin_4);
       
      SPI_Cmd(SPI1, DISABLE); //??????SPI???è ×???????
  
 /* SPI1 configuration */
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //?è??SPI?¤×÷????:?è?????÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //?è??SPI???????ó??:SPI·???????8?????á??
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //???????®???±????????:?±???ü????
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //?????????????????±????
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS???????????¨NSS?????©?????í???¨????SSI???©???í:????NSS??????SSI??????
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;                //?¨???¨?????¤·???????:?¨?????¤·???????256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //???¨??????????MSB??????LSB??????:??????????MSB??????
        SPI_InitStructure.SPI_CRCPolynomial = 7;            //CRC?????????à????
        SPI_Init(SPI1, &SPI_InitStructure);             //?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷
       
        //SPI1->CR1|=1<<6; //SPI?è±?????
        /* Enable SPI1  */
        SPI_Cmd(SPI1, ENABLE); //????SPI???è
       
        SPI_ReadWriteByte(0xff);//????????  
}

每天都是新开始
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-4-24 23:39:58 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2015-5-12
在线时间
0 小时
发表于 2015-10-19 17:49:44 | 显示全部楼层
AD。。。。。
回复

使用道具 举报

21

主题

144

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1132
金钱
1132
注册时间
2015-7-31
在线时间
155 小时
发表于 2015-10-19 18:27:40 | 显示全部楼层
难道片内的ADC不够用么?...
回复

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2016-4-13
在线时间
18 小时
发表于 2016-5-13 10:25:45 | 显示全部楼层
是不是内置AD问题多啊,用过的说一下
回复

使用道具 举报

29

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
613
金钱
613
注册时间
2012-6-15
在线时间
161 小时
发表于 2016-5-13 10:46:52 | 显示全部楼层
用示波器看看总线有没有异常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表