STM32视频教程

ADC单通道转换示例

作者:陈广
日期:2023-3-11


视频播放地址

点击播放

框图下载

单通道转换源码(寄存器版)

/* USER CODE BEGIN 2 */
  ADC1->CR2 |= 1; //启动ADC
  LL_mDelay(1);  //延时1毫秒
  ADC1->CR2 |= 4; //自校准
  while(ADC1->CR2 & 4); //等待自校准完成
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  ADC1->CR2 |= 1<<22 | 1<<20; //启动规则通道
	  while(!(ADC1->SR & 2)); //等待转换完成
	  uint16_t val = ADC1->DR & 0xFFF; //获取转换数据
	  float vol = 3.3 * val / 4096; //转换为电压值
	  printf("vol = %f\n", vol);
	  LL_mDelay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

单通道转换源码(LL库版)

/* USER CODE BEGIN 2 */
  LL_ADC_Enable(ADC1); //启动ADC
  LL_mDelay(1);  //延时1毫秒
  LL_ADC_StartCalibration(ADC1); //自校准
  while(LL_ADC_IsCalibrationOnGoing(ADC1)); //等待自校准完成
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  LL_ADC_REG_StartConversionSWStart(ADC1); //启动规则通道
	  while(!LL_ADC_IsActiveFlag_EOS(ADC1)); //等待转换完成
	  uint16_t val = LL_ADC_REG_ReadConversionData12(ADC1); //获取转换数据
	  float vol = 3.3 * val / 4096; //转换为电压值
	  printf("vol = %f\n", vol);
	  LL_mDelay(500);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
;

© 2018 - IOT小分队文章发布系统 v0.3