2

我无法理解 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);
      }
  }
4

1 回答 1

2

在设置 中的位后,您可以像 ADC1 上的任何其他通道一样读取 V REFINT通道 (17) 。这是一个内部模拟信号,没有与之关联的引脚。V REFINT具有 1.20 ± 0.04 V 的固定电压。TSVREFEADC1->CR2

如果 ADC 输入引脚连接到 V DDA,则读数为 4095。如果连接到 V SSA,则为 0。如果在这些限制之间有任何其他电压 V 1 ,则为 4095 * V 1 / V DDA . 这也适用于 V REFINT通道。

当您测量 V REFINT时,ADC1->DR= 4095 * V REFINT / V DDA。因为您知道 V REFINT = 1.20V,所以可以计算出 V DDA =4095 * 1.20 / ADC1->DRVolts。

于 2019-09-02T07:48:41.303 回答