【STM32CubeMx你不知道的那些事】第四章:ADC查询方式配置

上一章我们讲了STM32CubeMx串口的配置,这一张我们来讲一下ADC的配置。有些人以前知道ADC就是模数转换器,具体的没有去深究,那么问题来啦,什么是模数转换器?他的精度是多少?怎么计算?

下面我来给大家科普一下什么叫做模数转换器。顾名思义,模数转换器就是把模拟信号转换为数字信号的工具。我们要想获得电压值,只能将模拟量转换为数字量计算。例如我们的例程使用的是STM32F103C8T6,该芯片内置的是一个12位的ADC,什么是12位呢?12位意思就是采样分辨率为2^12 = 4096。ADC采集的电压范围是0~3.3V。每一份就是3.3V/4096的电压值。所以我们后面采集到的电压值是数字量,其中还牵涉补偿,这里就不细说了。

一、准备工作

1、使用第一章配置好的文件,这里不多说了。大家也可以用自己配置好的工程文件。

2、准备一块最小系统核心板。(杜邦线若干)

3、选取自己需要的ADC通道和ADC通道对应的IO口。

二、具体操作

1、在Pinout菜单栏下,ADC的选择与配置。配置如图

在外设栏里选择ADC1,IN0打钩。右边可视图就看到ADC_IN0变成绿色表示IO配置成功。

2、在Configuration菜单栏下,点击Analog下的ADC1弹出配置界面,配置如图

这里因为ADC是查询方式所以,基本配置都是默认的。

3、生成工程

点击Project菜单栏选择Generate code,工程生成完毕。

4、打开MDK工程,工程里面配置

1)首先声明一个变量用来存储ADC采集回来的值。

unsigned int AD_Value;

2)在while循环里面增加几句话来不断的获取当前IO口的值。

  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
      HAL_ADC_Start(&hadc1);

      HAL_ADC_PollForConversion(&hadc1, 50);

      if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
      {
          AD_Value = HAL_ADC_GetValue(&hadc1);

      }

      HAL_Delay(1000);

  }

5、调试测试

1)编译通过后仿真

①点击运行。

②在watch窗口观看变量AD_Value的值。

这里AD_Value值有三种情况,当PA0口接地时AD_Value为0、当PA0口接3.3.VCC时AD_Value本来应该是4095但是这里有了一些偏差可能因素有很多(转换时间、ADC参考电源、或输入电源本身),还有当ADC口浮空的情况下,ADC的值是不断跳变的,所以当看到你的AD_Value值在跳变不用担心,先接一个固定的电源试试,切记一定是3.3.V以内的直流电源,不然直接会烧芯片!

如有什么不懂联系加QQ群:1063618791欢迎大家学习交流!

发布了6 篇原创文章 · 获赞 2 · 访问量 836

猜你喜欢

转载自blog.csdn.net/qq_15117167/article/details/104512417