stm32f105rct6 使用ADC1 的 PC0、PC1、PC2、PC3、PC4通道 測電壓

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);
    }

}

發佈了26 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章