打印

请帮忙看下我的ADC程序哪里不对,怎么采样不了呢?

[复制链接]
1646|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RCC初始函数中
/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div4);


void AdcInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef   ADC_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  ADC_DeInit(ADC1);
  // RA0 - analog input
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Speed = (GPIOSpeed_TypeDef)0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init (GPIOA, &GPIO_InitStructure);
  // ADC Structure Initialization
  ADC_StructInit(&ADC_InitStructure);
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);
  // Enable the ADC
  ADC_Cmd(ADC1, ENABLE);
  // ADC calibration
  // Enable ADC1 reset calibration register
  ADC_ResetCalibration(ADC1);
  // Check the end of ADC1 reset calibration register
  while(ADC_GetResetCalibrationStatus(ADC1) == SET);
  // Start ADC1 calibration
  ADC_StartCalibration(ADC1);
  // Check the end of ADC1 calibration
  while(ADC_GetCalibrationStatus(ADC1) == SET);
  // Configure channel
  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);

//  ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
  // Start the conversion
//  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

main(void)
{
...
    if (g_1s==1)//1s时间到
   {
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
   while ((ADC1->SR&ADC_FLAG_EOC)==0);
   g_u16ADC=ADC_GetConversionValue(ADC1);

   }
...
}
沙发
mcuatmel|  楼主 | 2012-1-9 16:00 | 只看该作者
我的采样结果是2,可外引脚也达1.8V。

使用特权

评论回复
板凳
mcuatmel|  楼主 | 2012-1-9 16:12 | 只看该作者
ADC引脚为PA0。

使用特权

评论回复
地板
香水城| | 2012-1-9 16:23 | 只看该作者
请检查一下输入阻抗。

使用特权

评论回复
5
mcuatmel|  楼主 | 2012-1-9 16:32 | 只看该作者
测DC12V,用电阻分压,上端为200K,下端为39K。
ADC的输入阻抗最好为多大?

使用特权

评论回复
6
香水城| | 2012-1-9 16:50 | 只看该作者
手册中有:

STM32_ADC_Input_Impedance.GIF (18.85 KB )

STM32_ADC_Input_Impedance.GIF

使用特权

评论回复
7
mcuatmel|  楼主 | 2012-1-9 16:58 | 只看该作者
我加了如下一句:
  ADC1->SMPR2=ADC_SampleTime_239Cycles5;
结果还是一样,很小,1或2。

使用特权

评论回复
8
mcuatmel|  楼主 | 2012-1-9 17:20 | 只看该作者
找到问题了,谢谢香主!
这句我配置的不对:
// Configure channel
  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);
应改成:
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);
因为我用的是PA0,所以是通道0,这个程序是从别处拷贝来的,未改完全。

使用特权

评论回复
9
香水城| | 2012-1-9 17:49 | 只看该作者
找到问题了,谢谢香主!
这句我配置的不对:
// Configure channel
  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);
应改成:
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1 ...
mcuatmel 发表于 2012-1-9 17:20


嗯,真是错一点都不行哦,:handshake

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

512

主题

1456

帖子

2

粉丝