/*========================================================================================================= * Function : int16_t ADC_UsbDNegative(void) * Describe : 获取ADC_Key通道数值 * Input : void * Output : void * Return : void * Record : 2021/11/29 ==========================================================================================================*/ int16_t ADC_Key(void) { UINT8 i = 0; UINT16 AdcValue=0; ADC_ExtSingleChSampInit(SampleFreq_3_2,ADC_PGA_0); ADC_ChannelCfg( 0 ); adclen = 0; 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中断服务程序 { if( ADC_GetITStatus() ) { ADC_ClearITFlag(); if( adclen < 12 ) { abcBuff[adclen] = ADC_ReadConverValue(); ADC_StartUp(); // 作用清除中断标志并开启新一轮采样 } adclen++; } }
请问一下为什么程序每次会卡在while(adclen<12)这个地方导致程序死机,IO口做了浮空输入初始化
如果将采样改为
for( i = 0; i < 12; i++ ) { abcBuff[i] = ADC_ExcutSingleConver(); }
不使用中断的话是可以正常采样的
热门产品 :
CH32X035: 32位USB+USB PD单片机