我在每次上电后使用这个函数测量的第一个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;
}
}