在线时间10 小时
UID144367
ST金币0
蝴蝶豆0
注册时间2015-7-1
初级会员
- 最后登录
- 2018-3-9
|
发表于 2017-4-10 14:55:14
|
显示全部楼层
a0a.1 0b0c
uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)
{
uint16_t GetADC_Value = 0;
FlagStatus flag_status;
//ADC1_DeInit();
/*
* ADC1_CONVERSIONMODE_CONTINUOUS = 转换模式:连续转换 ADC1_CONVERSIONMODE_SINGLE= 单次转换
ADC1_CHANNEL_2 = ADC通道2
ADC1_PRESSEL_FCPU_D2 = 时钟分频器 fADC1= fMASTER/2
ADC1_EXTTRIG_TIM, DISABLE = 启用或者关闭外部触发转换事件:内部定时器1的TRG事件--关闭
ADC1_ALIGN_LEFT = 数据对齐方向:左对齐
ADC1_SCHMITTTRIG_CHANNEL0, DISABLE = 启用或者关闭指定通道的施密特触发器:通道2--关闭
(ADC1_SCHMITTTRIG_ALL, DISABLE = 所有通道--关闭)
*/
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel, ADC1_PRESSEL_FCPU_D2, \
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
ADC1_Cmd(ENABLE);
ADC1_StartConversion();
delay_us(10);
flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
if (flag_status != RESET) // SET or RESET
{
GetADC_Value = ADC1_GetConversionValue(); //返回ADC结果
}
return GetADC_Value;
}
//读AD值
void Read_Temperature_TEST()
{
Conversion_Value = Get_ADCCH_Value(ADC1_CHANNEL_3); //TEMP_AD_TEST_Value PD2
TEMP_AD_TEST_Value = Conversion_Value;
Conversion_Value = Get_ADCCH_Value(ADC1_CHANNEL_4); //TEMP_AD_Value PD3
TEMP_AD_Value = Conversion_Value;
}
在主循环里面,跑Read_Temperature_TEST()。读出来的值是 TEMP_AD_TEST_Value = 464, TEMP_AD_Value = 1000 证明第三通道读出来是正常的,后面通道的受到第三通道的在通道切换时的相互影响,所以后面的第4通道读出来的值就不正常。但是,如果单独只读一个通道,另一个通道不读,这两个通道分别读出来的AD值都是正常的。。太不可思议了,还有这种情况出现 ,希望引起大家的注意。
希望有解决办法的高人出来指点一下。
|
|