内部的参考电压VREF难道不应该是4096吗?

发布: 2010-3-15 18:36 | 作者: 06082314 | 来源: StmFans思蜕盟 OPELC 自由电子联盟

小弟现在遇到这样一个问题:外接VREF是3.3V,但用这两句读内部的参考电压VREF不是4096,哪位大哥能帮忙解释原因呀?
  /* Enable the temperature sensor and vref internal channel */
  ADC_TempSensorVrefintCmd(ENABLE);
  
  /* ADC1 regular channel14 configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_239Cycles5);
binglin (2010-3-15 19:36:29)
和ADCx_IN17相连接不是参考电压,它是内部参照电压VREFINT,测量它的结果当然不是4096了。另外:12位的AD转换是不可能输出4096的结果,最大值只能是4095

关于内部参照电压VREFINT与参考电压的贴子请看:STM32内部参照电压VREFIN的使用
06082314 (2010-3-15 19:43:45)
2# binglin
原来是这样啊,还有一个问题:为什么用温度传感器的时候要使能温度传感和参考电压信道?
void ADC_TempSensorVrefintCmd(FunctionalState NewState)
{
  /* Check the parameters 检查参数 */
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the temperature sensor and Vrefint channel[使能温度传感和参考电压信道]*/
    ADC1->CR2 |= CR2_TSVREFE_Set;
  }
  else
  {
    /* Disable the temperature sensor and Vrefint channel[禁止温度传感和参考电压信道]*/
    ADC1->CR2 &= CR2_TSVREFE_Reset;
  }
}
binglin (2010-3-15 20:05:53)
寄存器ADC_CR2中的AWDEN位是激活温度传感器及内部参照电压VREFINT的使能位,它们共用同一个位来设置。

你看看CR2_TSVREFE_Set及CR2_TSVREFE_Reset的定义就清楚了。

#define CR2_TSVREFE_Set             ((u32)0x00800000)
#define CR2_TSVREFE_Reset           ((u32)0xFF7FFFFF)

执行了“ADC1->CR2 |= CR2_TSVREFE_Set; ”后的结果就是将ADC_CR2中的AWDEN位(置23位为1),即启内部参照电压VREFINT及温度传感器

执行了“ADC1->CR2 &= CR2_TSVREFE_Reset; ”后的结果就是将ADC_CR2中的AWDEN位(置23位为0),即禁止内部参照电压VREFINT及温度传感器
binglin (2010-3-15 20:11:53)
再一次提醒你,你所说的“使能温度传感和参考电压信道”是翻译错了,别再引用了,以免被误导。

VREFINT是内部参照电压,STM32没有内部参考电压。


截图27.jpg

06082314 (2010-3-15 21:36:32)
5# binglin
谢谢,斑竹,感谢指点~~