热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

STM32ADC多通道采集

ADC多通道采集(阻塞模式、ADC_DMA模式)ADC多通道采集(阻塞模式)ADC多通道采集(DMA模式&#x


ADC多通道采集(阻塞模式、ADC_DMA模式)

    • ADC多通道采集(阻塞模式)
    • ADC多通道采集(DMA模式)


ADC多通道采集(阻塞模式)

1、时钟源配置
在这里插入图片描述

2、配置RCC时钟(选择第三个选项 Crystal/Ceramic Resonator 晶体/陶瓷谐振器 )
在这里插入图片描述
3、配置一个LED灯,在程序编写中让它闪烁代表程序没有死机。
在这里插入图片描述
4、设置调试模式,我们选择SW
在这里插入图片描述
5、设置串口,因为我们的程序采集到了adc的数值之后会发送到串口调试助手上,证明ADC采集是否成功。选择异步模式、波特率是默认的115200.其他配置也是默认的
在这里插入图片描述
6、配置ADC。这里我选择的两个通到采集,分别是PA0、PA1.主要是配制成:扫描模式、连续转换模式、间断模式、
在这里插入图片描述
设置为2个通道
采用软件触发方式启动采集
2个通道各自的参数设置
在这里插入图片描述

7、优先级设置高一点,怕的中断其他干扰在这里插入图片描述
下面是主要的代码 。

// 串口重定向和ADC采集的代码
int fputc(int ch, FILE *f) // 串口重定向{ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;}
uint16_t Get_adc()
{//开启ADC1HAL_ADC_Start(&hadc1);//等待ADC转换完成,超时为100msHAL_ADC_PollForConversion(&hadc1,100);//判断ADC是否转换成功if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){//读取值return HAL_ADC_GetValue(&hadc1);}return 0;
}

下面是while循环的代码

HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);HAL_Delay(1000);for(uint8_t i&#61;0;i<2;i&#43;&#43;){ ADC_Value[i]&#61;Get_adc();//分别存放通道1、2的ADC值}for(uint8_t i&#61;0;i<2;i&#43;&#43;){ printf("ADC通道%d,:%.4f V\r\n",i,(ADC_Value[i]*3.3/4096));}

ADC多通道采集&#xff08;DMA模式&#xff09;

配置基本上与阻塞模式的相同&#xff0c;除了ADC的设置外。
在这里插入图片描述
在这里插入图片描述
DMA配置

mode&#xff1a;模式

Normal&#xff1a;正常模式&#xff0c;当一次DMA数据传输完后&#xff0c;停止DMA传送 &#xff0c;也就是只传输一次

Circular&#xff1a; 循环模式&#xff0c;传输完成后又重新开始继续传输&#xff0c;不断循环永不停止

data width&#xff1a;数据宽度

byte&#xff1a;字节&#xff0c;通用8位&#xff0c;与u8相同

word&#xff1a;字长&#xff0c;与硬件的位数相同&#xff0c;STM32是32位&#xff0c;所以对应是u32

Half Word&#xff1a;半个字长&#xff0c;所以对应是u16

Memory打钩表示存储ADC值的内存地址&#xff08;数组&#xff09;会自增

1、我们在设置了DMA传输数据&#xff0c;就要取消ADC转换完成中断。
在这里插入图片描述
2、代码的思想。是在while中调用启动函数&#xff0c;待ADC采集及DMA传输完成之后。我们在DMA传输完成中断服务函数中把采集到的职打印到串口上。

int fputc(int ch, FILE *f) // 串口重定向{ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;}
#define ADC_MAX_NUM 2 uint16_t ADC_Values[ADC_MAX_NUM]&#61;{0};//启动函数&#xff0c;需要在main中调用一次
void ADC_DMA_caiji()
{//启动DMAHAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC_Values,ADC_MAX_NUM);}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)//DMA采集完成中断服务函数
{printf("烟雾%d\r\n",ADC_Values[0]);printf("光电%d\r\n",ADC_Values[1]);HAL_ADC_Stop_DMA(&hadc1);//关闭DMA的ADC采集
}

下面是在while中的代码

HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);ADC_DMA_caiji();HAL_Delay(2000);//采集速度太快&#xff0c;加了2s的延时。

2、成果展示
在这里插入图片描述
写的不好&#xff0c;请多多见谅。有问题的可以联系我修改。


推荐阅读
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 详解 Qt 串口通信程序全程图文 (4)
    Qt串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题。1、在窗口中加入一些组合框ComboBox&# ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 开发笔记:实现1353表达式中的括号匹配(栈的应用) ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
author-avatar
额外的房间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有