ch573f DMA ADC疑问

我在每次上电后使用这个函数测量的第一个ADC值总是会在2900左右 不管测量源是多少


uint16_t abcBuff[40];

volatile uint8_t DMA_end = 0;

void Crank_Test()

{

    DMA_end = 0;

    ADC_AutoConverCycle(224); 

    ADC_ExtSingleChSampInit(SampleFreq_8, ADC_PGA_0);

    ADC_ChannelCfg(0);

    ADC_DMACfg(ENABLE, (uint16_t)(uint32_t)&abcBuff[0], (uint16_t)(uint32_t)&abcBuff[40], ADC_Mode_Single);

    PFIC_EnableIRQ(ADC_IRQn);

    ADC_StartDMA();

    while(!DMA_end);

    for(int i = 0; i < 40; i++)

    {

printf("abcBuff[%d]: %d\n", i, abcBuff[i]); 

    }

}

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void ADC_IRQHandler(void) //adc中断服务程序

{

    if(ADC_GetDMAStatus())

    {

        ADC_StopDMA();

        R16_ADC_DMA_BEG = ((uint32_t)abcBuff) & 0xffff;

        ADC_ClearDMAFlag();

        DMA_end = 1;

    }

}


在上电的时候初始化的 并且也加了延迟 大概率会出现这个情况


查看GPIO是否配置为浮空的状态,如果涉及到引脚的切换,例如输入上拉配置为浮空后,需要加个如200ms延时再进行测试。

其他导致数据不准,例如buf未清0。可以使用ADC的例程做一下这个测试。如果还有问题可以发送至lpc@wch.cn,我们进行查看。


只有登录才能回复,可以选择微信账号登录