|
STM32L083读取内部温度,AD不校准可以读出现在温度18.3度,校准后温度为负了,-13.42.有没有朋友遇到过这个问题,求助! AD校准后,测试到的VREF值非常准确3.298 V,其他输入电压也很准,就是温度不正确了。 校准程序如下: if (HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED) != HAL_OK) { printf("\r\nAD Calibration fail\r\n"); } |
微信公众号
手机版
/* (1) Select HSI16 by writing 00 in CKMODE (reset value) */
/* (2) Select continuous mode */
/* (3) Select CHSEL18 for temperature sensor */
/* (4) Select a sampling mode of 111 i.e. 239.5 ADC clk to be greater
than 2.2us */
/* (5) Wake-up the Temperature sensor (only for Temp sensor and
VRefInt) */
//ADC1->CFGR2 &= ~ADC_CFGR2_CKMODE; /* (1) */
ADC1->CFGR1 |=ADC_CFGR1_CONT; /* (2) */
ADC1->CHSELR =ADC_CHSELR_CHSEL18; /* (3) */
ADC1->SMPR |=ADC_SMPR_SMP; /* (4) */
ADC->CCR |=ADC_CCR_TSEN; /* (5) */
读温度时正负号是依据getadcvalue值大于还是小于零决定,关键是值的计算准确
非常感谢!在static void MX_ADC_Init(void)初始化函数最后增加如下两行就可以了:
ADC1->SMPR |=ADC_SMPR_SMP;
ADC->CCR |=ADC_CCR_TSEN;
ADC1->SMPR |=ADC_SMPR_SMP;
ADC->CCR |=ADC_CCR_TSEN;
就可以了,我试了增加第一个ADC1->SMPR |=ADC_SMPR_SMP;其实就可以了。意思是我的温度采样速度太快了吗?