1.ADC基础
- ADC(Analog-Digital Converter)模拟-数字转换器
- ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
- 12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V,转换结果范围:0~4095
- 18个输入通道,可测量16个外部和2个内部信号源
- 规则组和注入组两个转换单元
- 模拟看门狗自动监测输入电压范围
- STM32F103RCT6 ADC资源:ADC1、ADC2,ADC3

ADC数据对齐:
数据右对齐 数据左对齐
数据左对齐

2.查询方式测量电压
1)进行基本配置

2)编辑代码
除了与串口有关的外,代码主要是在main函数中,主要涉及ADC的转换流程:启动--》等待转换完成--》读取传话数值

int main(void)
{
  /* USER CODE BEGIN 1 */
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADCEx_Calibration_Start(&hadc1);    //对 ADC 进行校准,确保采样准确性
	uint16_t ADC_Value;
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		HAL_ADC_Start(&hadc1);     //开启ADC转换
	
		if (HAL_ADC_PollForConversion(&hadc1, 50) == HAL_OK) {  //等待 ADC 转换完成,超时时间为 50ms
			if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC)) // 检查ADC是否转换完成  EOC = End Of Conversion,转换完成标志位
			{
				ADC_Value = HAL_ADC_GetValue(&hadc1);   //获取ADC采样值
				printf("ADC1 Reading : %d \r\n",ADC_Value);  //输出ADC采样值
				printf("PA1 True Voltage value : %.2fV \r\n",ADC_Value*3.3f/4096);  //根据参考电压,计算并输出采集电压 3.3f表示浮点计算
			}
		}
		HAL_Delay(500);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


















