文章内的代码使用
HAL
库。
ADC
即 模数转换器,是指 将 连续变化的模拟信号 转换成 离散的数字信号 的器件。
文章目录
- 前言
- 一、ADC 原理图
- 二、CubeMX 配置
- 三、ADC 代码讲解
- 总结
前言
一、ADC 原理图
从原理图我们可以看到 STM32G431 内部集成 两个 最高位 12 位 的 ADC :。ADC1 , ADC2
。
对应的 可变电阻 是 R38 , R37
。
对应的 IO 接口是 PB12 , PB15
。
通过 改变 可变电阻,可以得到不同的电压值。
VDD
接的电压是 0 ~ 3.3V。
二、CubeMX 配置
(1)配置 RCC (异步)
(2)配置 PB12 ,PB15。(显示是黄色的,不要担心,我们只是没有配置模式,第三步会配置)
(3)配置 PB12 的 ADC1_IN11 为 单端模式。(这时我们发现 PB12引脚编程绿色了,就选定好了)
同理 我们配置 PB15 的 ADC2_IN15 为 单端模式。
(4)配置 工程模式 和 版本。
(5)选取加入.c /.h文件(便于编写代码)
(6) 创建工程
三、ADC 代码讲解
HAL_ADC_Start : 函数来启动 ADC。
HAL_ADC_GetValue :获取采样值。
STM32G431 内部集成 两个 最高位 12 位 的 ADC,则它的分辨率为 1 / 4096。
由于板子的 VDD
接的电压是 0 ~ 3.3V。所以我们 经过 adc1_val / 4095.0f * 3.3 f 数据处理 , 可以得到需要的电压。
uint16_t adc1_val; //ADC1 采样值
uint16_t adc2_val; //ADC2 采样值
float volt_r38, volt_r37; //ADC1,ADC2 电压值
//开启ADC1
HAL_ADC_Start(&hadc1);
adc1_val = HAL_ADC_GetValue(&hadc1); // 获取ADC1 采集值
volt_r38 = adc1_val / 4095.0f * 3.3f; //数据梳理转换为 0 ~ 3.3 V的电压
//开启ADC2
HAL_ADC_Start(&hadc2);
adc2_val = HAL_ADC_GetValue(&hadc2); // 获取ADC2 采集值
volt_r37 = adc2_val / 4095.0f * 3.3f; //数据梳理转换为 0 ~ 3.3 V的电压
总结
下一节我们讲解 LCD 屏幕。