我无法理解 VREFINT 在 stm32f103 板中的使用。谁能解释一下如何使用 VREFINT 获取 stm32f103 中的 adc 值?
if(HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
adcVrefInt = HAL_ADC_GetValue(&hadc1);
vdd = 4095.0 * 1.20 / (float)adcVrefInt;
vdd += 0.61; // .61 is the difference i'm getting in VDD
sprintf(buffer, "VREFINT: %ld\tVDD: %.2f\t", adcVrefInt, vdd);
HAL_UART_Transmit(&huart1, (uint8_t *)buffer, strlen(buffer), 100);
if(HAL_ADC_PollForConversion(&hadc2, 100) == HAL_OK)
{
adcValue = HAL_ADC_GetValue(&hadc2);
adcVoltage = (vdd/4095.0) * adcValue;
sprintf(buffer, "ADC_PA0: %ld\tVoltage-PA0: %.2f\n", adcValue, adcVoltage);
HAL_UART_Transmit(&huart1, (uint8_t *)buffer, strlen(buffer), 100);
}
}
最佳答案
设置TSVREFE
后,您可以像读取ADC1上的任何其他 channel 一样读取VREFINT channel (17)进入ADC1->CR2
。它是一个内部模拟信号,没有与之关联的引脚。 VREFINT 的固定电压为 1.20 ± 0.04 V。
如果 ADC 输入引脚连接到 VDDA,您会得到读数 4095。如果它连接到 VSSA,您会得到 0。如果有任何这些限制之间的其他电压 V1,您将得到 4095 * V1/VDDA。这也适用于 VREFINT channel 。
当您测量 VREFINT 时,ADC1->DR
= 4095 * VREFINT/VDDA。因为您知道 VREFINT = 1.20V,所以您可以计算出 VDDA=4095 * 1.20/ADC1->DR
伏特。
关于adc - 如何在stm32f103 bluepill中使用VREFINT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57752689/