ADC__控制電位計同步改變燈的亮度
094500jik8zkdylt7bmi75.png (12.93 KB, 下載次數(shù): 36)
下載附件
2017-12-25 19:11 上傳
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;//掃描轉(zhuǎn)換關(guān)閉 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//連續(xù)轉(zhuǎn)換模式 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不用外部事件啟動轉(zhuǎn)換 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //數(shù)據(jù)對齊為右對齊 ADC_InitStructure.ADC_NbrOfChannel = 1;//規(guī)則通道序列長度為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); //復(fù)位指定的ADC1的校準(zhǔn)寄存器 ADC_ResetCalibration(ADC1); //獲取ADC1復(fù)位校準(zhǔn)寄存器的狀態(tài),設(shè)置狀態(tài)則等待 while(ADC_GetResetCalibrationStatus(ADC1)) { } ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)) { } //配置ADC模塊需注意的是需要配置adc的啟動方式,這里配置為軟件啟動 ADC_SoftwareStartConvCmd(ADC1, ENABLE); } 5. ADC中斷函數(shù)編寫,把ADC得到的值轉(zhuǎn)換設(shè)置給PWM的占空比,改變LED亮度 void ADC1_2_IRQHandler(void) { u16 ADCConvertedValue; if(ADC_GetITStatus(ADC1,ADC_IT_EOC)!=RESET)//獲取ADC中斷狀態(tài) { ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);//清楚中斷位 ADCConvertedValue = ADC_GetConversionValue(ADC1);//取得ADC1掃描通道得到的值 TIM_SetCompare4(TIM2,ADCConvertedValue*4096/0xfff);//重新設(shè)置PWM的比較捕獲值,即TIM_Pulse得值 }
} 6.將PWM的引腳(我的是PA3)和LED0的PF6連起來,通過旋鈕即可控制LED0亮度
|