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亮度
|