|
本帖最后由 w2024 于 2024-9-8 15:34 编辑
您好,fm33le0单片机,使用片上温度传感器,用查询方式获取adc值进行计算,可以得到实际温度,如果用dma方式进行adc采集,FL_ADC_INTERNAL_TS通道获取的值跳变非常大,500-900,几乎不能用,麻烦帮忙看看问题原因。还有一个问题就是adc校准的问题
FL_GPIO_InitTypeDef GPIO_InitStruct;
FL_ADC_InitTypeDef defaultInitStruct;
FL_ADC_CommonInitTypeDef CommonInitStruct;
CommonInitStruct.clockSource = FL_RCC_ADC_CLK_SOURCE_RCHF;
CommonInitStruct.clockPrescaler = FL_RCC_ADC_PSC_DIV8;
FL_ADC_CommonInit(&CommonInitStruct);
defaultInitStruct.conversionMode = FL_ADC_CONV_MODE_CONTINUOUS;
defaultInitStruct.autoMode = FL_ADC_SINGLE_CONV_MODE_AUTO;
defaultInitStruct.waitMode = FL_ENABLE;
defaultInitStruct.overrunMode = FL_ENABLE;
defaultInitStruct.scanDirection = FL_ADC_SEQ_SCAN_DIR_FORWARD;
defaultInitStruct.externalTrigConv = FL_ADC_TRIGGER_EDGE_NONE;
defaultInitStruct.triggerSource = FL_ADC_TRGI_RTC;
defaultInitStruct.fastChannelTime = FL_ADC_FAST_CH_SAMPLING_TIME_4_ADCCLK;
defaultInitStruct.lowChannelTime = FL_ADC_SLOW_CH_SAMPLING_TIME_192_ADCCLK;
defaultInitStruct.oversamplingMode = FL_ENABLE;
defaultInitStruct.overSampingMultiplier = FL_ADC_OVERSAMPLING_MUL_16X;
defaultInitStruct.oversamplingShift = FL_ADC_OVERSAMPLING_SHIFT_4B;
FL_ADC_Init(ADC, &defaultInitStruct);
//FL_ADC_EnableCalibration(ADC);
//while(FL_ADC_IsActiveFlag_EndOfCalibration(ADC) == 0);//这样写会卡死在这里
FL_ADC_DisableSequencerChannel(ADC, FL_ADC_ALL_CHANNEL); //清空打开的通道
FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_TS);
FL_ADC_EnableSequencerChannel(ADC, FL_ADC_INTERNAL_AVREF);
FL_ADC_EnableDMAReq(ADC);
|
|