本帖最后由 Dongy07 于 2025-2-19 17:45 编辑
开发板使用的是GD32H757J-START,使用ADC2连续转换一个通道,采样率为4.7Msps,分别采样50khz、100khz、200khz、300khz、400khz、500khz,总是在某些地方出现误差,问题出现在哪里?
以下是ADC配置代码
void adc_config(void)
{
/* 复位ADC */
adc_deinit(ADC2);
/* 配置ADC时钟 */
adc_clock_config(ADC2, ADC_CLK_SYNC_HCLK_DIV4);
/* 使能ADC连续转换模式 */
adc_special_function_config(ADC2, ADC_CONTINUOUS_MODE, ENABLE);
/* 禁用ADC扫描模式 */
adc_special_function_config(ADC2, ADC_SCAN_MODE, DISABLE);
/* 配置ADC分辨率 */
adc_resolution_config(ADC2, ADC_RESOLUTION_12B);
/* 配置ADC数据对齐方式 */
adc_data_alignment_config(ADC2, ADC_DATAALIGN_RIGHT);
/* 配置ADC通道长度 */
adc_channel_length_config(ADC2, ADC_REGULAR_CHANNEL,1);
/* 配置ADC常规通道 */
adc_regular_channel_config(ADC2, 0, ADC_CHANNEL_1, 7); // 配置通道0为ADC_CHANNEL_1
/* 配置ADC触发方式 */
adc_external_trigger_config(ADC2, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);
/* 使能ADC DMA功能 */
adc_dma_request_after_last_enable(ADC2);
adc_dma_mode_enable(ADC2);
/* 使能ADC */
adc_enable(ADC2);
/* 等待ADC稳定 */
delay_1ms(1);
/* 配置ADC校准模式 */
adc_calibration_mode_config(ADC2, ADC_CALIBRATION_OFFSET);
/* 配置ADC校准次数 */
adc_calibration_number(ADC2, ADC_CALIBRATION_NUM1);
/* 使能ADC校准 */
adc_calibration_enable(ADC2);
/* 使能ADC软件触发 */
adc_software_trigger_enable(ADC2, ADC_REGULAR_CHANNEL);
}
|