本文开发环境:
- MCU型号:STM32F103C8T6
- IDE环境: MDK 5.27
- 代码生成工具:STM32CubeMx 5.4.0
- HAL库版本:STM32Cube_FW_F1_V1.8.0
本文内容:
- STM32CubeMx 配置 ADC
- 示例工程
一、 ADC 简介
ADC(analogue-to-digital conversion)指的是将模拟量转换为数字量的过程,在 MCU 中有广泛的应用,通常用以测量电压的值,比如,测量热敏或光敏的电阻两端的电压,就可以获取当前温度或光线的强度。
二、使用 STM32CubeMx 配置 ADC
使用 STM32CubeMx(以下简称 Mx) 可以非常方便的配置外设,一般有以下几个步骤:
- 选择目标单片机
- 选择系统时钟源,配置系统时钟树
- 打开调试 IO 口
- 配置外设
- 生成指定 IDE 的工程
由于除配置外设以外为通用配置,不再赘述。
三、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_ADC1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
// 启动ADC转换
HAL_ADC_Start(&hadc1);
// 等待转换完成,第二个参数表示超时时间,单位ms
HAL_ADC_PollForConversion(&hadc1, 100);
// 为换取ADC状态
int adc_value = HAL_ADC_GetValue(&hadc1);
// 采取的右对齐除以2的12次方,参考电压为3.3V
float voltage = (float)adc_value / 4096 * 3.3;
printf("voltage = %f\r\n", voltage);
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
HAL_ADC_Start()
:开启一次ADC转换HAL_ADC_PollForConversion()
:等待转换完成HAL_ADC_GetValue()
:获取得到的数值
最后通过 电压的值为: v = A D C 值 / 4096 ( 16 b i t ) ∗ 3.3 V ( 参 考 电 压 ) v = ADC 值/4096(16bit) * 3.3V(参考电压) v=ADC值/4096(16bit)∗3.3V(参考电压)
五、附件
STM32 ADC MDK5 工程
提取码:5bo6
测试: