|
|
|
|
#include "adc.h"
|
|
|
|
|
#include "delay.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ADC
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ<EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>0~3
|
|
|
|
|
void Adc_Init(void)
|
|
|
|
|
{
|
|
|
|
|
ADC_InitTypeDef ADC_InitStructure;
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
|
|
|
|
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1 , ENABLE ); //ʹ<EFBFBD><EFBFBD>ADC1ͨ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADC<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>6 72M/6=12,ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻<EFBFBD>ܳ<EFBFBD><EFBFBD><EFBFBD>14M
|
|
|
|
|
|
|
|
|
|
//PA1 <EFBFBD><EFBFBD>Ϊģ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
|
|
|
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
GPIO_Init(GPIOB, &GPIO_InitStructure);
|
|
|
|
|
|
|
|
|
|
ADC_DeInit(ADC1); //<EFBFBD><EFBFBD>λADC1
|
|
|
|
|
|
|
|
|
|
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:ADC1<EFBFBD><EFBFBD>ADC2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //ģ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ͨ<EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //ģ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ADC_InitStructure.ADC_NbrOfChannel = 1; //˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADCͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|
|
|
|
ADC_Init(ADC1, &ADC_InitStructure); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADC_InitStruct<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADCx<EFBFBD>ļĴ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
ADC_Cmd(ADC1, ENABLE); //ʹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADC1
|
|
|
|
|
|
|
|
|
|
ADC_ResetCalibration(ADC1); //ʹ<EFBFBD>ܸ<EFBFBD>λУ
|
|
|
|
|
while(ADC_GetResetCalibrationStatus(ADC1));
|
|
|
|
|
ADC_StartCalibration(ADC1);
|
|
|
|
|
while(ADC_GetCalibrationStatus(ADC1));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADCֵ
|
|
|
|
|
//ch:ͨ<EFBFBD><EFBFBD>ֵ 0~3
|
|
|
|
|
u16 Get_Adc(u8 ch)
|
|
|
|
|
{
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>ADC<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|
|
|
|
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADCͨ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ239.5<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ʹ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADC1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//<EFBFBD>ȴ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
return ADC_GetConversionValue(ADC1); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ADC1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u16 Get_Adc_Average(u8 ch,u8 times)
|
|
|
|
|
{
|
|
|
|
|
u32 temp_val=0;
|
|
|
|
|
u8 t;
|
|
|
|
|
for(t=0;t<times;t++)
|
|
|
|
|
{
|
|
|
|
|
temp_val+=Get_Adc(ch);
|
|
|
|
|
delay_ms(5);
|
|
|
|
|
}
|
|
|
|
|
return temp_val/times;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|