首页 > 其他分享 >STM32:HAL多通道ADC数据采集

STM32:HAL多通道ADC数据采集

时间:2024-04-16 18:57:05浏览次数:33  
标签:DMA HAL dma MAX 多通道 STM32 NUM adc ADC

1、配置ADC,设置5个通道采集

2、使能DMA设置为循环模式

 生成工程后编写函数

1、校准ADC,开启DMA接收,在main函数初始化部分调用

#define ADC_MAX_NUM  5
#define BTN_BUFF_LEN 100
static uint16_t dma_adc_data[BTN_BUFF_LEN * ADC_MAX_NUM];
 1 /**
 2  * @brief 校准adc,开启DMA接收
 3  *
 4  */
 5 void Adc_Init(void)
 6 {
 7     // 校准
 8     HAL_ADCEx_Calibration_Start(&hadc1);
 9     HAL_ADC_Start_DMA(&hadc1, (uint32_t *)dma_adc_data, BTN_BUFF_LEN * ADC_MAX_NUM);
10 
11 }

/**DMA采集的数据存放buff,采集5个通道,每个通道采集BTN_BUFF_LEN次
* dma_adc_data数据存放方式:HAL_ADC_Start_DMA(&hadc1, (uint32_t *)dma_adc_data, BTN_BUFF_LEN * ADC_MAX_NUM);
* 数据采集u32类型,dma_adc_data为u16类型,
* 第1个u32:通道1和通道2
* 第2个u32:通道3和通道4
* 第3个u32:通道5和通道1
* 第4个u32:通道2和通道3
* 第5个u32:通道4和通道5
*/

dma_adc_data中,第0、5、10、15...个数据为第1通道数据,可求取平均数滤波获取当前ADC值,经测试,无通道间数据干扰的问题

/**DMA采集完成标志 */
uint8_t DMA_RECEIVE_OVER = 0;
/**获取的数据存放最大值和最小值 */
static uint16_t adc_max, adc_min;
/**数据累加 */
static uint32_t adc_add;
uint16_t ADC_Values[ADC_MAX_NUM] = {0};
/**
 * @brief Get the Adc Value object 处理原始数据,获取5个通道的数据
 */
static void Get_Adc_Value(void)
{
    if (DMA_RECEIVE_OVER == 1) // DMA数据采集完处理数据
    {
        DMA_RECEIVE_OVER = 0;

        for (uint8_t adc_channel = 0; adc_channel < ADC_MAX_NUM; adc_channel++)
        {
            adc_max = 0;
            adc_add = 0;
            adc_min = 0xffff;
            for (uint16_t i = 0; i < BTN_BUFF_LEN; i++)
            {
                adc_add += dma_adc_data[ADC_MAX_NUM * i + adc_channel];
                adc_max = adc_max > dma_adc_data[ADC_MAX_NUM * i + adc_channel] ? adc_max : dma_adc_data[ADC_MAX_NUM * i + adc_channel];
                adc_min = adc_min < dma_adc_data[ADC_MAX_NUM * i + adc_channel] ? adc_min : dma_adc_data[ADC_MAX_NUM * i + adc_channel];
            }
            ADC_Values[adc_channel] = (adc_add - adc_max - adc_min) / (BTN_BUFF_LEN - 2);
        }
        
    }
}

/**
 * @brief DMA采集完成中断服务函数
 *
 * @param hadc ADC句柄
 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
    // 采集完成标志位置1
    DMA_RECEIVE_OVER = 1;
}

 

标签:DMA,HAL,dma,MAX,多通道,STM32,NUM,adc,ADC
From: https://www.cnblogs.com/yianyan/p/18138923

相关文章

  • datawhale-动手学图深度学习task01
    动手学图深度学习task1第一章:介绍充满图的世界图包括人类社会、化学相互作用、知识图谱等,可以分为自然定义的和人造的两种,图有时也称为网络,例如社交网络、经济网络等(这些情况下的网络指的不是深度神经网络)。图的现实世界应用社交网络:有个著名结论是6度分离(两个人之间可以......
  • STM32F10系列开发板的GPIO介绍
    1.GPIO介绍GPIO是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组16个IO口,组数视芯片而定。STM32F103ZET6芯片是144脚的芯片,具有GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF和GPIOG七组GPIO口,共有112个IO口可供我们编程使用2.GPIO八种功能模......
  • 基于阿里云、七牛云、宝塔面板,从零开始用Halo搭建个人博客网站
    目录目录目录购买服务器环境要求硬件配置CPU内存磁盘网络软件环境JRE(JavaRuntimeEnvironment)MySQL(可选)Web服务器(可选)Wget(可选)VIM(可选)浏览器支持名词解释~(符号)运行包工作目录购买域名服务器安装配置远程连接阿里云网页连接Xshell程序连接博客安装进行Halo的安装准备正式安装Hal......
  • 多通道的AXI仲裁方法V3
    https://www.cnblogs.com/VerweileDoch/p/18030653V2。读moduleAribe_state_rd#(parameterintegerM_AXI_ID_WIDTH=1,parameterintegerM_AXI_ADDR_WIDTH=32,parameterintege......
  • 读论文-基于序列_会话的推荐_挑战,方法,应用和机遇(Sequential_Session-based Recommend
    前言今天读的论文为一篇于2022年7月7日发表在第45届国际ACM信息检索研究与发展会议论文集(Proceedingsofthe45thInternationalACMSIGIRConferenceonResearchandDevelopmentinInformationRetrieval.)的论文,文章主要讲述了序列推荐系统(SRSs)和基于会话的推荐系统(SBRSs......
  • 读论文-新闻推荐系统:近期进展、挑战与机遇的评述(News recommender system_ a review
    前言今天读的论文为一篇于2022年发表在"人工智能评论"(ArtificialIntelligenceReview)的论文,文章主要强调了NRS面临的主要挑战,并从现有技术中确定了可能的解决方案。引用这篇论文:[1]Raza,Shaina,andChenDing."Newsrecommendersystem:areviewofrecentprogress,c......
  • 阿里云域名使用ssl域名证书自动续期工具acme.sh报错Error add txt for domain:_acme-c
    现象:说明·acmesh-official/acme.shWiki·GitHub根据中文说明,第二步,第二种dns方法,执行生成证书时报此错,根据报错信息可知,是添加txtdns解析记录时出错原因:权限不足,阿里云为了提高安全性不建议直接使用主账号创建 AccessKey(因为默认权限过大),建议使用RAM用户(可以理......
  • stm32采集烟雾和温湿度+ESP8266转发解析+python构造http
      https://www.cnblogs.com/gooutlook/p/16061136.html  http://192.168.1.103/Control_SensorPin?sensor=sensor_all&action=GetDatapython#-*-coding:utf-8-*-importrequestsimporturllib.parse#pipinstallrequestsdefSendHttp():#ht......
  • STM32-模数转化器
    ADC(Analog-to-DigitalConverter)指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。ADC相关参数说明:分辨率:分辨率以二进制(或十进制)数的位数来表示,一般有8位、10位、12位、16位等,它说明模数转换器对输入信号的分辨能力,位数越多,表......
  • 基于STM32的智能家居系统设计与实现:手机APP与语音控制家电
    基于STM32的智能家居系统设计与实现:手机APP与语音控制家电一、研究背景与意义随着科技的进步和人们生活水平的提高,智能家居系统逐渐成为现代家庭的新宠。智能家居系统通过集成各种智能设备和传感器,为用户提供更加便捷、舒适和安全的家居环境。本研究旨在设计一个基于STM32微......