ADC__控制電位計同步改變燈的亮度
1. 開啟ADC時鐘和GPIO配置(模擬輸入模式) 2. 中斷的配置 3. PWM的配置 4. ADC配置 void adc_config() { ADC_InitTypeDef ADC_InitStructure; ADC_DeInit(ADC1); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); //RCC時鐘配置為72Mhz,分頻為12Mhz ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//獨立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE;//掃描轉換關閉 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//連續轉換模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不用外部事件啟動轉換 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //數據對齊為右對齊 ADC_InitStructure.ADC_NbrOfChannel = 1;//規則通道序列長度為1 ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5); ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); ADC_Cmd(ADC1, ENABLE); //復位指定的ADC1的校準寄存器 ADC_ResetCalibration(ADC1); //獲取ADC1復位校準寄存器的狀態,設置狀態則等待 while(ADC_GetResetCalibrationStatus(ADC1)) { } ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)) { } //配置ADC模塊需注意的是需要配置adc的啟動方式,這里配置為軟件啟動 ADC_SoftwareStartConvCmd(ADC1, ENABLE); } 5. ADC中斷函數編寫,把ADC得到的值轉換設置給PWM的占空比,改變LED亮度 void ADC1_2_IRQHandler(void) { u16 ADCConvertedValue; if(ADC_GetITStatus(ADC1,ADC_IT_EOC)!=RESET)//獲取ADC中斷狀態 { ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);//清楚中斷位 ADCConvertedValue = ADC_GetConversionValue(ADC1);//取得ADC1掃描通道得到的值 TIM_SetCompare4(TIM2,ADCConvertedValue*4096/0xfff);//重新設置PWM的比較捕獲值,即TIM_Pulse得值 }
} 6.將PWM的引腳(我的是PA3)和LED0的PF6連起來,通過旋鈕即可控制LED0亮度
|