新手上路
积分 21
金钱 21
注册时间 2017-7-18
在线时间 2 小时
1 金钱
我总共采集5次,我打断点在return就会只有2次值,有3次为0.但是如果我断点打在其他地方手动一步步运行,就能采集5次。还有我用另一通道一样的写法5次都能采集到。不知道是怎么回事,谁帮帮忙啊谢谢uint16_t N1_IN_AdcPro(void)
{
//uint16_t adc_data[5];
// uint16_t VREF_adc_data[5];
// float ftemp1,ftemp2;
uint16_t adc_sum1=0,adc_sum2=0,adc_sum3=0;
ADC_ConvertedValue=0;
ADC_ConvertedValueLocal=0;
ADC_ChannelConfTypeDef sConfig;
/* ### - 2 - Start calibration ############################################ */
while (HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED) != HAL_OK);
/* ### - 3 - Channel configuration ######################################## */
sConfig.Channel = ADC_CHANNEL_10;
sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
//sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
while (HAL_ADC_ConfigChannel(&hadc, &sConfig)!= HAL_OK);
while (HAL_IS_BIT_CLR(PWR->CSR, PWR_CSR_VREFINTRDYF));
/**Configure for the selected ADC regular channel to be converted.
*/
sConfig.Channel = ADC_CHANNEL_VREFINT;
while (HAL_ADC_ConfigChannel(&hadc, &sConfig)!= HAL_OK);
for(u08 i=0;i<5;i++)
{
/* ### - 4 - Start conversion in DMA mode ################################# */
HAL_ADC_Start_DMA(&hadc,&ADC_ConvertedValue,sizeof(ADC_ConvertedValue));
while( HAL_DMA_PollForTransfer(&hdma_adc, HAL_DMA_FULL_TRANSFER, 10) != HAL_OK);
ADC_ConvertedValueLocal =(float)(ADC_ConvertedValue&0xFFF);
adc_sum1=(int)ADC_ConvertedValueLocal;
adc_sum2+=adc_sum1;
}
while(HAL_ADC_Stop_DMA(&hadc)!= HAL_OK); //采样完后stop adc and dma
adc_sum3=adc_sum2/5;
return adc_sum3;
}
我来回答