標題: STM32 ADC控制電位計同步改變燈的亮度 [打印本頁]
作者: 小七仔 時間: 2017-12-25 18:21
標題: STM32 ADC控制電位計同步改變燈的亮度
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;//掃描轉換關閉
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//連續(xù)轉換模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不用外部事件啟動轉換
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);
//復位指定的ADC1的校準寄存器
ADC_ResetCalibration(ADC1);
//獲取ADC1復位校準寄存器的狀態(tài),設置狀態(tài)則等待
while(ADC_GetResetCalibrationStatus(ADC1))
{
}
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1))
{
}
//配置ADC模塊需注意的是需要配置adc的啟動方式,這里配置為軟件啟動
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
5. ADC中斷函數(shù)編寫,把ADC得到的值轉換設置給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);//重新設置PWM的比較捕獲值,即TIM_Pulse得值
}
}
6.將PWM的引腳(我的是PA3)和LED0的PF6連起來,通過旋鈕即可控制LED0亮度
作者: 通信122 時間: 2019-7-24 18:17
ADC中斷函數(shù)編寫可以寫在那些地方呢
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |