中级会员
 
- 积分
- 258
- 金钱
- 258
- 注册时间
- 2014-3-8
- 在线时间
- 18 小时
|

楼主 |
发表于 2014-9-17 16:42:13
|
显示全部楼层
回复【3楼】正点原子:
---------------------------------
以前在PA.0和PA.1上的AD,转移到PC.0和PC.1上就出问题了,是不是除了修改通道,还得修改其他的选项啊??
void ad_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置预分频值为6,72M/6=12M,ADC的时钟频率最大为14M
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStruct);
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
// ADC_InitStruct.ADC_ScanConvMode=ENABLE;
ADC_InitStruct.ADC_ScanConvMode=DISABLE;
// ADC_InitStruct.ADC_ContinuousConvMode=ENABLE;
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
// ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC3;
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStruct.ADC_NbrOfChannel=2; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1, &ADC_InitStruct);
ADC_Cmd(ADC1, ENABLE); //置位ADC1.CR2.ADON
ADC_ResetCalibration(ADC1); //开启复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待AD校结束准
}
float get_adcv_value(void)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET); //等待转换结束
return ADC_GetConversionValue(ADC1);
}
float get_adcv_average(void)
{
u8 i,j;
adcv_sum=0;
for(i=0;i<15;i++)
{
adcv_val=get_adcv_value();
adcv_val*=(3.3/4300);
delay(3); //延时24us
}
for(j=5;j<15;j++)
{
adcv_sum+=adcv_val[j];
}
adcv_average=adcv_sum/10;
adcv_average*=6;
return adcv_average;
}
float get_adci_value(void)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET); //等待转换结束
return ADC_GetConversionValue(ADC1);
}
float get_adci_average(void)
{
u8 i,j;
adci_sum=0;
for(i=0;i<30;i++)
{
adci_val=get_adci_value();
adci_val*=(3.3/4510);
delay(1); //延时24us
}
for(j=0;j<30;j++)
{
adci_sum+=adci_val[j];
}
adci_average=adci_sum/30;
// adci_average-=2.5366;
// adci_average/=-0.6428;
adci_average-=2.5466;
adci_average/=-0.6428;
return adci_average;
} |
|