先看【正确采集】:
ADC2 value = 0.835474 V
ADC1 value = 0.825000 V
ADC2 value = 0.798413 V
ADC1 value = 0.815332 V
再看【错误采集】
ADC2 value = 0.000000 V
ADC1 value = 0.794385 V
ADC2 value = 0.000000 V
ADC1 value = 0.821777 V
问题出在哪呢?
【错误程序】:
//第 1 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
ADC_ConvertedValueLocal[0] =(float)(((ADC_ConvertedValue[0] & 0xFF00) >> 16)*3.3/4096);//2
ADC_ConvertedValueLocal[1] =(float)((uint16_t)ADC_ConvertedValue[0]*3.3/4096);//1
//第 2 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
ADC_ConvertedValueLocal[2] =(float)(((ADC_ConvertedValue[0] & 0xFF00) >> 16)*3.3/4096);//2
ADC_ConvertedValueLocal[3] =(float)((uint16_t)ADC_ConvertedValue[0]*3.3/4096);//1
【正确程序】:
//第 1 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
ADC_ConvertedValueLocal[0] =(float)(((ADC_ConvertedValue[0] & 0xFFFF0000) >> 16)*3.3/4096);//2
ADC_ConvertedValueLocal[1] =(float)((uint16_t)ADC_ConvertedValue[0]*3.3/4096);//1
//第 2 个请求:ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
ADC_ConvertedValueLocal[2] =(float)(((ADC_ConvertedValue[0] & 0xFFFF0000) >> 16)*3.3/4096);//2
ADC_ConvertedValueLocal[3] =(float)((uint16_t)ADC_ConvertedValue[0]*3.3/4096);//1
问题一目了然了吧!
ADC_ConvertedValue是32位变量,& 0xFF00后得到16位值,无论什么值,只要再 >> 16,结果都会是0。(jnfxx)