STM32F103RCT6学习之五:ADC

发布于:2025-02-11 ⋅ 阅读:(119) ⋅ 点赞:(0)

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 */
}

3)分析


网站公告

今日签到

点亮在社区的每一天
去签到