void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 , ENABLE ); //使能ADC1通道時鐘
RCC_ADCCLKConfig(RCC_PCLK2_Div8); //設置ADC分頻因子8 72M/8=9,ADC最大時間不能超過9M
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入引腳
GPIO_Init(GPIOC, &GPIO_InitStructure);
ADC_DeInit(ADC1);//復位ADC1,將外設 ADC1 的全部寄存器重設爲缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在獨立模式
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數據右對齊
ADC_InitStructure.ADC_NbrOfChannel = 1; //順序進行規則轉換的ADC通道的數目
ADC_Init(ADC1, &ADC_InitStructure); //根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器
ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1);//使能復位校準
while(ADC_GetResetCalibrationStatus(ADC1)); //等待復位校準結束
ADC_StartCalibration(ADC1); //開啓AD校準
while(ADC_GetCalibrationStatus(ADC1)); //等待校準結束
}
u16 Get_Adc(u8 ch) {
//設置指定ADC的規則組通道,一個序列,採樣時間
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,採樣時間爲239.5週期
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的軟件轉換啓動功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1規則組的轉換結果
}
OS_STK DSTCE_IR_TASK[DSTCE_IR_STK_SIZE];
u16 u16DstcIr[5] = {0};
void DstceIr_Task(void *p_arg){
u16 u16TempValue = 0;
Adc_Init();
OSTimeDlyHMSM(0,0,0,50);
while(OS_TRUE){
u16TempValue = Get_Adc(ADC_Channel_10);
u16DstcIr[0] = u16TempValue;
OSTimeDlyHMSM(0,0,0,5);
u16TempValue = Get_Adc(ADC_Channel_11);
u16DstcIr[1] = u16TempValue;
OSTimeDlyHMSM(0,0,0,5);
u16TempValue = Get_Adc(ADC_Channel_12);
u16DstcIr[2] = u16TempValue;
OSTimeDlyHMSM(0,0,0,5);
u16TempValue = Get_Adc(ADC_Channel_13);
u16DstcIr[3] = u16TempValue;
OSTimeDlyHMSM(0,0,0,5);
u16TempValue = Get_Adc(ADC_Channel_14);
u16DstcIr[4] = u16TempValue;
OSTimeDlyHMSM(0,0,0,40);
}
}