内部的参考电压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);
/* 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);

关于内部参照电压VREFINT与参考电压的贴子请看:STM32内部参照电压VREFIN的使用
原来是这样啊,还有一个问题:为什么用温度传感器的时候要使能温度传感和参考电压信道?
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;
}
}
你看看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及温度传感器
VREFINT是内部参照电压,STM32没有内部参考电压。
截图27.jpg
谢谢,斑竹,感谢指点~~