我是靠谱客的博主 干净钢笔,最近开发中收集的这篇文章主要介绍STM32_HAL库—ADC采集数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、简介

       STM32 的ADC精度为 12 位,且每个 ADC 最多有 16 个外部通道。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

        ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为:

Tconv = ( 采样时间 + 12.5 个周期 ) / 预分频

        一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是12M,然后设置 “ 采样时间 ” 为 1.5 个周期。通过公式:(1.5+12.5) / 12M = 1.166...us ,算出最短的转换时间大约为 1.17us。

        下面使用的 3 个例子设置的 “ 采样时间 ” 为 239.5 个周期,转换时间则大约为 240.54us。

二、实例

1. 晶振配置(72M)在这里插入图片描述

2. (单通道、阻塞式)配置及实现方式

(1)配置数据

(2)代码实现

HAL_ADCEx_Calibration_Start(&hadc1);    //ADC内部校准
HAL_ADC_Start(&hadc1);    //ADC开启转换



while(1){

    uint16_t ADC_num = HAL_ADC_GetValue(&hadc1);    //获取ADC端口数据

    float ADC_V = 3.3*ADC_num/4096;    //换算后的电压值(默认参考电压接的3.3V)

    ......
}

3. (多通道、阻塞式)配置及实现方式

(1)配置数据

 

 (2)代码实现




HAL_ADCEx_Calibration_Start(&hadc1);    //ADC内部校准
HAL_ADC_Start(&hadc1);    //ADC开启转换



while(1){

    uint16_t ADC_num1 = HAL_ADC_GetValue(&hadc1);    //获取ADC端口1 数据
    uint16_t ADC_num2 = HAL_ADC_GetValue(&hadc1);    //获取ADC端口2 数据

    float ADC_V1 = 3.3*ADC_num1/4096;    //换算后的电压值(默认参考电压接的3.3V)
    float ADC_V2 = 3.3*ADC_num2/4096;    //换算后的电压值(默认参考电压接的3.3V)

    ......
}


3. (多通道、DMA)配置及实现方式

(1)配置数据

(2)代码实现



__IO uint16_t ADC_Value[2]={0};    //ADC缓存变量


HAL_ADCEx_Calibration_Start(&hadc1);	//ADC1内部校准
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,2); 	//开启ADC中断DMA转换


while(1){

    float ADC_1 = (float)3.3*ADC_Value[0]/4096;  //对ADC_Value[0](通道8)缓存的值换算成电平数据
    float ADC_2 = (float)3.3*ADC_Value[1]/4096;  //对ADC_Value[1](通道9)缓存的值换算成电平数据


    .....
}





//ADC1_DMA中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){	
	HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,2); //再次开启ADC中断DMA转换
}


最后

以上就是干净钢笔为你收集整理的STM32_HAL库—ADC采集数据的全部内容,希望文章能够帮你解决STM32_HAL库—ADC采集数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部