最近在学习403A的单片机,在使用403A的ADC采样时,发现一个奇怪的问题,就是启动ADC后,似乎ADC对被采信号有影响。
用示波器看,未启动ADC时,被测信号是一个1.3V的直流信号,当ADC启动后,电压变为1.6v了,关键还出现了毛刺。
实在不知道怎么回事,还请知道的能告知。直流信号是通过电位器分压得到的。
403A初始化,系统时钟为192MHz
static void adc_config(void)
{
adc_base_config_type adc_base_struct;
dma_init_type dma_init_struct;
crm_periph_clock_enable(CRM_DMA1_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
crm_adc_clock_div_set(CRM_ADC_DIV_8);
dma_reset(DMA1_CHANNEL1);
dma_default_para_init(&dma_init_struct);
dma_init_struct.buffer_size = 1;
dma_init_struct.direction = DMA_DIR_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_base_addr = (uint32_t)&ADC1_Value;
dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_BYTE;
dma_init_struct.memory_inc_enable = FALSE;
dma_init_struct.peripheral_base_addr = (uint32_t)&(ADC1->odt)+1; // 利用DMA实现8位精度时+1
dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_BYTE;
dma_init_struct.peripheral_inc_enable = FALSE;
dma_init_struct.priority = DMA_PRIORITY_HIGH;
dma_init_struct.loop_mode_enable = TRUE;
dma_init(DMA1_CHANNEL1, &dma_init_struct);
dma_channel_enable(DMA1_CHANNEL1, TRUE);
//dma_interrupt_enable(DMA1_CHANNEL1, DMA_FDT_INT, TRUE);
/* select combine mode */
adc_combine_mode_select(ADC_INDEPENDENT_MODE);
adc_base_default_para_init(&adc_base_struct);
adc_base_struct.sequence_mode = FALSE;
adc_base_struct.repeat_mode = TRUE;
adc_base_struct.data_align = ADC_LEFT_ALIGNMENT;//ADC_RIGHT_ALIGNMENT; // 利用DMA实现8位精度时左对齐
adc_base_struct.ordinary_channel_length = 1;
adc_base_config(ADC1, &adc_base_struct);
adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_239_5);
adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);
adc_dma_mode_enable(ADC1, TRUE);
adc_enable(ADC1, TRUE);
adc_calibration_init(ADC1);
while(adc_calibration_init_status_get(ADC1));
adc_calibration_start(ADC1);
while(adc_calibration_status_get(ADC1));
adc_ordinary_software_trigger_enable(ADC1, TRUE);
}
|