上一章我们讲了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欢迎大家学习交流!