学习链接:【HAL库详解】STM32 ADC HAL库使用_哔哩哔哩_bilibili
目录
一、概念
1、ADC介绍
2、ADC主要特征
二、ADC模式
1、查询模式
1.1 单通道采集软件配置
1.2 查询模式步奏
1.3 单通道采集主要代码
2、多通道采集
2.1 软件配置
2.2 主要代码
一、概念
1、ADC介绍
12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右
对齐方式存储在16位数据寄存器中。
2、ADC主要特征
12位分辨率
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间:
─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求: 2.4V到3.6V
● ADC输入范围: VREF- ≤ VIN ≤ VREF+
● 规则通道转换期间有DMA请求产生。
二、ADC模式
1、查询模式
1.1 单通道采集软件配置
1.1.1 只需选择接口就行
1.1.2 打开串口用于打印数据
1.2 查询模式步奏
1.3 单通道采集主要代码
#include <stdio.h>
#include <string.h>//ADC采集值获取
int16_t get_adc_value(void)
{HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){return HAL_ADC_GetValue(&hadc1);}return -1;
}//main函数主循环代码如下
/* USER CODE BEGIN WHILE */int16_t value=0;char buff[30];while (1){value=get_adc_value();if(value==-1){HAL_UART_Transmit(&huart2, (uint8_t*)"GetADCValue Faild !! \r\n", 25, 50);}else{sprintf(buff, "value:%d \r\n",value);HAL_UART_Transmit(&huart2, (uint8_t*)buff, strlen(buff), 50);}HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}
2、多通道采集
2.1 软件配置
2.2 主要代码
while (1){get_adc_value(DMARes);sprintf(buff, "value:%d,%d,%d \r\n",DMARes[0],DMARes[1],DMARes[2]);HAL_UART_Transmit(&huart2, (uint8_t*)buff, strlen(buff), 50);HAL_Delay(500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}void get_adc_value(int* DMARes)
{HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成DMARes[0]= HAL_ADC_GetValue(&hadc1);HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成DMARes[1]= HAL_ADC_GetValue(&hadc1);HAL_ADC_PollForConversion(&hadc1, 100);//阻塞判断是否转换完成DMARes[2]= HAL_ADC_GetValue(&hadc1);HAL_ADC_Stop(&hadc1);
}