STM32_HAL库—ADC采集数据

这篇具有很好参考价值的文章主要介绍了STM32_HAL库—ADC采集数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、简介

二、实例

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

2. (单通道、中断式)配置及实现方式

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

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


一、简介

       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。

二、实例

晶振配置(72M)hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

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

(1)配置数据

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

(2)代码实现文章来源地址https://www.toymoban.com/news/detail-694578.html

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)

    ......
}

2. (单通道、中断式)配置及实现方式

 (1)配置数据

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

ADC1中断使能。

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

  (2)代码实现。

uint16_t ADC_num;

//主函数
main(){

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


    while(1){

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

    }

}



//ADC中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
	
    ADC_num=HAL_ADC_GetValue(&hadc1);
   
}

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

(1)配置数据

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

 (2)代码实现

HAL_ADCEx_Calibration_Start(&hadc1);    //ADC内部校准


while(1){

    
    HAL_ADC_Start(&hadc1);    //ADC开启转换
    while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);//等待ADC转换完成,或者超过最大等待时间
    uint16_t ADC_num1 = HAL_ADC_GetValue(&hadc1);    //获取ADC端口1 数据


    HAL_ADC_Start(&hadc1);    //ADC开启转换
    while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);//等待ADC转换完成,或者超过最大等待时间
    uint16_t ADC_num2 = HAL_ADC_GetValue(&hadc1);    //获取ADC端口2 数据


    HAL_ADC_Start(&hadc1);    //ADC开启转换
    while (HAL_ADC_PollForConversion(&hadc1, 100) != HAL_OK);//等待ADC转换完成,或者超过最大等待时间
    uint16_t ADC_num3 = 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)
    float ADC_V2 = 3.3*ADC_num2/4096;    //换算后的电压值(默认参考电压接的3.3V)

    ......
}


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

(1)配置数据

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

hal库adc采集,STM32与GD32,stm32,单片机,嵌入式硬件

(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采集数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32+HAL库使用ADC轮询模式采集音频信号

    ADC模块:咪头声音采集模块 缺点:占用CPU的使用率         软件开始ADC转换后,一直等到转换完成后,才向后执行,这个代码在初始化ADC之后执行一次校准(不执行这一步也可以,但精度可能会低一些);然后就可以使用ADC轮询转换了,只需要三步: 启动转换 、 等待转

    2024年02月15日
    浏览(29)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(33)
  • STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存。 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相关文章: STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx(二) STM32cubemx ADC+TIM+DMA超频采样 ADC+TIM+DMA采集交流信号是电赛中使用范围最为广泛的一个技术。这个模

    2024年02月03日
    浏览(33)
  • STM32L051使用HAL库操作实例(14)- ADC采集电压

    目录 一、前言 二、ADC外设简要说明 三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2) 1.MCU选型 2.时钟使能 3.外部时钟配置 4.串口配置 5.ADC引脚配置 6.配置STM32CubeMX生成工程文件 7.点击GENERATE CODE生成工程文件 四、工程源码 五、运行状态 一、前言 本文主要介绍通过HAL库搭建

    2024年01月16日
    浏览(45)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(38)
  • STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

    12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定

    2024年02月06日
    浏览(59)
  • 【STM32+HAL+Proteus】系列学习教程---ADC(查询、中断、DMA模式下的电压采集)

    1、学会STM32CubeMX软件关于ADC的配置 2、掌握ADC三种模式(查询、中断、DMA)编程 3、具体目标:1、将开发板单片机采集到的电压值上传至上位机串口调试助手显示。 ADC(Analog to Digital Converter)即模数转换器,用来将模拟信号转换为数字信号。 A/D转换过程 分辨率:  A/D转换器对

    2024年04月26日
    浏览(25)
  • STM32(HAL库)通过ADC读取MQ2数据

    目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 ADC外设配置 2.3 串口外设配置  2.4 项目生成  3、KEIL端程序整合 3.1 串口重映射 3.2 ADC数据采集 3.3 主函数代 3.4 效果展示 本文通过STM32F103C8T6单片机通过HAL库方式对MQ2烟雾传感器进行数据的读取,并通过

    2024年02月16日
    浏览(23)
  • [HAL库]STM32 ADC功能和DMA读数据的方法

    这篇博客记录下 STM32F103R8T6 是怎么开ADC、用DMA搬数据的方法。方便日后使用的时候查资料。 DMA其实就是个搬运工,专门负责搬数据,没有DMA之前,搬数据是由MCU核心来负责,虽说都能完成搬数据的动作,但是MCU干这件事浪费资源且效率低,所以有DMA的场合尽量使用DMA来负责搬

    2024年02月14日
    浏览(25)
  • STM32 HAL库 STM32CubeMX -- ADC

    ADC(Analog-to-Digital Converter)指模/数转换器或者模拟/数字转换器。 是指将连续变量的模拟信号转换为离散的数字信号的器件。 也就是将 模拟信号 转化为 数字信号 。 STM32f103 系列有3 个ADC,精度为12 位,每个ADC 最多有16 个外部通道和2个内部信号源。其中ADC1 和ADC2 都有16 个外部

    2024年02月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包