UINT16?abcBuff[12]?=?{0}; UINT8?adclen?=?0; GPIOA_ModeCfg(GPIO_Pin_4,GPIO_ModeIN_Floating); int16_t?ADC_Key(void) { ????UINT8?i?=?0; ????UINT16?AdcValue=0; ????ADC_ExtSingleChSampInit(SampleFreq_3_2,ADC_PGA_0); ????ADC_ChannelCfg(?0?); ????adclen?=?0; //????for(?i?=?0;?i?<?12;?i++?) //????{ //????????abcBuff[i]?=?ADC_ExcutSingleConver();??????//?連續(xù)采樣20次 //????} ????ADC_ClearITFlag(); ????PFIC_EnableIRQ(?ADC_IRQn?); ????ADC_StartUp(); ????while(?adclen?<?12?) ????????; ????PFIC_DisableIRQ(?ADC_IRQn?); ????for(?i?=?2;?i?<?12;?i++?) ????????AdcValue?+=?abcBuff[i]; ????AdcValue?/=?10; ????return?AdcValue; } __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void?ADC_IRQHandler(?void?)?????????//adc中斷服務(wù)程序 { ??if(?ADC_GetITStatus()?) ??{ ????ADC_ClearITFlag(); ????if(?adclen?<?12?) ????{ ??????abcBuff[adclen]?=?ADC_ReadConverValue(); ??????ADC_StartUp();????????????????//?作用清除中斷標志并開啟新一輪采樣 ????} ????adclen++; ??} }
這是ADC部分的代碼,如果不用中斷是可以正常的,用中斷的話經(jīng)過調(diào)試發(fā)現(xiàn)會卡在如圖所示地方
但是不用中斷的話,測量時有時AD值會突然變成4095,麻煩幫忙看一下