当前位置: 首页 > news >正文

初学stm32 --- ADC单通道采集

目录

ADC寄存器介绍(F1)

ADC控制寄存器 1(ADC_CR1)

ADC控制寄存器 2(ADC_CR2)

ADC采样时间寄存器1(ADC_SMPR1)

ADC采样时间寄存器2(ADC_SMPR2)

ADC规则序列寄存器 1(ADC_SQR1)

ADC规则序列寄存器 2(ADC_SQR2)

ADC规则序列寄存器 3(ADC_SQR3)

ADC规则数据寄存器 (ADC_DR)

ADC状态寄存器(ADC_SR)

​编辑

单通道ADC采集实验配置步骤

相关HAL库函数介绍

关键结构体介绍(F1)

相关HAL库函数介绍

关键结构体介绍


ADC寄存器介绍(F1

ADC控制寄存器 1(ADC_CR1)

         摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.2

ADC控制寄存器 2(ADC_CR2)

ADC采样时间寄存器1(ADC_SMPR1)

 摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.4

ADC采样时间寄存器2(ADC_SMPR2)

 摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.5

ADC规则序列寄存器 1(ADC_SQR1)

 摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.9

ADC规则序列寄存器 2(ADC_SQR2)

 摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.10

ADC规则序列寄存器 3(ADC_SQR3)

摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.11 

ADC规则数据寄存器 (ADC_DR)

摘自:STM32F10xxx参考手册_V10(中文版).pdf11.12.14

ADC状态寄存器(ADC_SR)

单通道ADC采集实验配置步骤

1,配置ADC工作参数、ADC校准

        HAL_ADC_Init()HAL_ADCEx_Calibration_Start()

2ADC MSP初始化

        HAL_ADC_MspInit()     配置NVICCLOCKGPIO

3,配置ADC相应通道相关参数

        HAL_ADC_ConfigChannel()

4,启动A/D转换

        HAL_ADC_Start()

5,等待规则通道转换完成

        HAL_ADC_PollForConversion()

6,获取规则通道A/D转换结果

        HAL_ADC_GetValue()

相关HAL库函数介绍

关键结构体介绍(F1

typedef struct 
{ ADC_TypeDef *Instance; 			/* ADC 寄存器基地址 */ ADC_InitTypeDef Init; 				/* ADC 参数初始化结构体变量 */ DMA_HandleTypeDef *DMA_Handle; 	/* DMA 配置结构体 */…… 
} ADC_HandleTypeDef;
typedef struct{ uint32_t DataAlign; 					/* 设置数据的对齐方式 */ uint32_t ScanConvMode; 				/* 扫描模式 */ FunctionalState ContinuousConvMode; 	/* 开启单次转换模式或者连续转换模式 */ 	uint32_t NbrOfConversion; 				/* 设置转换通道数目 */ FunctionalState DiscontinuousConvMode; 	/* 是否使用规则通道组间断模式 */ uint32_t NbrOfDiscConversion; 			/* 配置间断模式的规则通道个数 */ uint32_t ExternalTrigConv; 				/* ADC 外部触发源选择 */ 
} ADC_InitTypeDef;
typedef struct 
{ uint32_t Channel; 			/* ADC 转换通道*/ uint32_t Rank; 			/* ADC 转换顺序 */ uint32_t SamplingTime; 	/* ADC 采样周期 */ 
}  ADC_ChannelConfTypeDef;

单通道ADC采集(DMA读取)配置步骤

1,初始化DMA

        HAL_DMA_Init()

2,将DMAADC句柄联系起来

        __HAL_LINKDMA()

3,配置ADC工作参数、ADC校准

        HAL_ADC_Init()HAL_ADCEx_Calibration_Start()

4ADC MSP初始化

        HAL_ADC_MspInit()     配置NVICCLOCKGPIO

5,配置ADC相应通道相关参数

        HAL_ADC_ConfigChannel()

6,使能DMA数据流传输完成中断

        HAL_NVIC_SetPriority()HAL_NVIC_EnableIRQ()

7,编写DMA数据流中断服务函数

        DMAx_Channely_IRQHandler()

8,启动DMA,开启传输完成中断

        HAL_DMA_Start_IT()

9,触发ADC转换,DMA传输数据

        HAL_ADC_Start_DMA()

相关HAL库函数介绍

关键结构体介绍

typedef struct 
{ uint32_t Direction; 				/* 传输方向 */ uint32_t PeriphInc; 				/* 外设(非)增量模式 */ uint32_t MemInc; 				/* 存储器(非)增量模式 */ uint32_t PeriphDataAlignment; 	/* 外设数据宽度 */ uint32_t MemDataAlignment; 		/* 存储器数据宽度 */ uint32_t Mode; 					/* 操作模式 */ uint32_t Priority; 				/* DMA通道优先级 */ 
}DMA_InitTypeDef; 

在DMA_HandleTypeDef结构体中

typedef struct __DMA_HandleTypeDef
{DMA_Channel_TypeDef   *Instance;                       /*!< Register base address                  */DMA_InitTypeDef       Init;                            /*!< DMA communication parameters           */ HAL_LockTypeDef       Lock;                            /*!< DMA locking object                     */  HAL_DMA_StateTypeDef  State;                           /*!< DMA transfer state                     */void                  *Parent;                                                      /*!< Parent object state                    */  void                  (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma);     /*!< DMA transfer complete callback         */void                  (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); /*!< DMA Half transfer complete callback    */void                  (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma);    /*!< DMA transfer error callback            */void                  (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma);    /*!< DMA transfer abort callback            */  __IO uint32_t         ErrorCode;                                                    /*!< DMA Error code                         */DMA_TypeDef            *DmaBaseAddress;                                             /*!< DMA Channel Base Address               */uint32_t               ChannelIndex;                                                /*!< DMA Channel Index                      */  } DMA_HandleTypeDef;  

通过注册回调函数:(这里注册的是传输完成中断)

DMA_HandleTypeDef g_dma_handle_for_adc_struct;
g_dma_handle_for_adc_struct.XferCpltCallback = XferCpltCallback_for_adc;    

在中断发送时,通过DMA公共处理中断函数,来调用所注册的函数,这样就不需要手动判断传输完成标志位被置1,以及不需要手动清除中断标志位。

注意:使用注册回调函数方法,STM32程序莫名其妙不会进入所注册的回调函数中,所以建议使用寄存器方法
 

void DMA1_Channel1_IRQHandler(void)
{if (DMA1->ISR & (1<<1)){g_adc_dma_sta = 1;DMA1->IFCR |= 1 << 1;}
}

相关文章:

初学stm32 --- ADC单通道采集

目录 ADC寄存器介绍&#xff08;F1&#xff09; ADC控制寄存器 1(ADC_CR1) ADC控制寄存器 2(ADC_CR2) ADC采样时间寄存器1(ADC_SMPR1) ADC采样时间寄存器2(ADC_SMPR2) ADC规则序列寄存器 1(ADC_SQR1) ADC规则序列寄存器 2(ADC_SQR2) ADC规则序列寄存器 3(ADC_SQR3) AD…...

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

本篇鸡汤&#xff1a;没有人能替你承受痛苦&#xff0c;也没有人能拿走你的坚强. 欢迎拜访&#xff1a;羑悻的小杀马特.-CSDN博客 本篇主题&#xff1a;带你解答洛谷的括号序列问题&#xff08;绝对巧解&#xff09; 制作日期&#xff1a;2025.01.10 隶属专栏&#xff1a;C/C题…...

Java(day7)

字符串练习 生成验证码 package day6; /*生成验证码 内容&#xff1a;可以是小写字母&#xff0c;也可以是大写字&#xff0c;还可以是数字 规则&#xff1a; 长度为5 内容中是四位字母&#xff0c;1位数字。 其中数字只有1位&#xff0c;但是可以出现在任意的位置。*/ impor…...

Word 转成pdf及打印的开源方案支持xp

Word转成pdf、打印的方案几乎没有免费开源的方案&#xff0c;现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装&#xff0c;点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...

LabVIEW软件侵权分析与应对

问&#xff1a;如果涉及到LabVIEW软件的仿制或模仿&#xff0c;特别是在功能、界面等方面&#xff0c;如何判断是否构成侵权&#xff1f;该如何应对&#xff1f; 答&#xff1a;LabVIEW软件的侵权问题&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、设计等方面&#xff0…...

【redis】centos7下安装redis7

在CentOS 7下安装Redis7可以通过以下两种方法实现&#xff1a;手动编译安装和使用YUM进行安装。 CentOS 7系统的环境和版本&#xff1a; $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)手动编译安装 参考官方文档&#xff1a;https://redis.io/docs/lates…...

[network]回顾:集线器(Hub)

集线器&#xff08;Hub&#xff09;的发明是计算机网络发展史上的一个重要里程碑。它最初的设计目的是为了解决局域网&#xff08;LAN&#xff09;中多台计算机共享网络资源的需求。 #mermaid-svg-OAmOmKYGAXoglS5z {font-family:"trebuchet ms",verdana,arial,sans-…...

79 Openssl3.0 RSA公钥加密数据

1 引言 最近不小心用到了openssl3.0&#xff0c;项目中需要使用rsa非对称加解密算法&#xff0c;所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。 之所以记录此篇文章&#xff0c;是因为网络上大多数是openssl3.0以前的版本的函数接口&#xff0c;而openssl3.0之后已经丢…...

EFCore HasDefaultValueSql (续2 HasComputedColumnSql)

前情&#xff1a;EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时&#xff0c;对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问&#xff1a; HasComputedColumnSql 对于计算…...

阿里巴巴TransmittableThreadLocal使用指南

前言 ThreadLocal在上下文的数据传输上非常的方便和简洁。工业实践中&#xff0c;比较常用的有三个&#xff0c;ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal&#xff0c;那么他们三个之间有什么区别呢&#xff1f; 常见的三种ThreadLocal比较 ThreadLoc…...

ubuntu20下编译linux1.0 (part1)

author: hjjdebug date: 2025年 01月 09日 星期四 15:56:15 CST description: ubuntu20下编译linux1.0 (part1) 该博客记录了新gcc编译旧代码可能碰到的问题和解决办法, 可留作参考 操作环境: ubuntu20 $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 $ as --vers…...

欧拉公式和傅里叶变换

注&#xff1a;英文引文机翻&#xff0c;未校。 中文引文未整理去重&#xff0c;如有异常&#xff0c;请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos ⁡ x i sin ⁡ x e^{ix} \cos{x} i …...

Jenkins内修改allure报告名称

背景&#xff1a; 最近使用Jenkins搭建自动化测试环境时&#xff0c;使用Jenkins的allure插件生成的报告&#xff0c;一直显示默认ALLURE REPORT&#xff0c;想自定义成与项目关联的名称&#xff0c;如图所示&#xff0c;很明显自定义名称显得高大上些&#xff0c;之前…...

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...

Ubuntu | PostgreSQL | 解决 ERROR: `xmllint` is missing on your system.

解决 sudo apt install apt-file sudo apt-file updatesudo apt-file search xmllint sudo apt install libxml2-utils执行 # postgres源码安装包解压文件夹中 make install make install问题 make -C src install make[2]: Entering directory /home/postgres/postgresql-1…...

uniapp使用chooseLocation安卓篇

本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称&#xff1a; res.name);console.log(详细地…...

《PC 上的开源神经网络多模态模型:开启智能交互新时代》

《PC 上的开源神经网络多模态模型&#xff1a;开启智能交互新时代》 一、引言二、多模态模型基础剖析&#xff08;一&#xff09;核心概念解读&#xff08;二&#xff09;技术架构探秘 三、开源多模态模型的独特魅力&#xff08;一&#xff09;开源优势尽显&#xff08;二&…...

Apache JMeter 压力测试使用说明

文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…...

腾讯云AI代码助手编程挑战赛-知识百科AI

作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发&#xff0c;让小朋友在一开始就对学习具有探索精神。在信息化时代下&#xff0c;会主动去学习自己认知以外的知识&#xff0c;同时丰富了眼界&#xff0c;开拓了新的知识。同时催生了在大数据时代下的信息共享化…...

【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &am…...

HTTP-响应协议

HTTP的响应过程&#xff1f; 浏览器请求数据--》web服务器过程&#xff1a;请求过程 web服务器将响应数据-》到浏览器&#xff1a;响应过程 响应数据有哪些内容&#xff1f; 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…...

SQL进阶实战技巧:即时订单比例问题

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 往期精彩 0 需求描述 订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。 请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单…...

什么是端口

端口是用来区分同一网络设备(IP地址)上运行的不同服务或应用程序接收外部数据的窗口。 以下是几个要点&#xff1a; 对于我们发送请求指定的url中的端口&#xff0c;指的是对方服务器的用于接收数据的端口&#xff0c;如http的80端口&#xff0c;服务器通常都会设定要监听来自…...

【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据

需求/背景 在我们的业务场景中&#xff0c;列表的加载使用easy_refresh组件&#xff1a; https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载&#xff0c;可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…...

【2025 Rust学习 --- 11 实用工具特型01】

清理特型Drop 当一个值的拥有者消失时&#xff0c;Rust 会丢弃&#xff08;drop&#xff09;该值。丢弃一个值就必须释放 该值拥有的任何其他值、堆存储和系统资源。 丢弃可能发生在多种情况下&#xff1a; 当变量超出作用域时&#xff1b;在表达式语句的末尾&#xff1b;当…...

网络安全基础以及概念

1. 安全领域的概念 1.1 网络产品 1. EDR:终端检测与响应(Endpoint Detection and Response),终端主要包括我们的笔记本、台式机、手机、服务器等,EDR是一种运行在终端上安全软件,主要负责监控网络流量、可疑进程、注册表活动等其他安全相关的事件与活动。当发现有威胁是自…...

windows和linux的抓包方式

1.实验准备&#xff1a; 一台windows主机&#xff0c;一台linux主机 wireshark使用&#xff1a; 打开wireshark&#xff0c;这些有波动的就代表可以有流量经过该网卡&#xff0c;选择一张有流量经过的网卡 可以看到很多的流量&#xff0c;然后可以使用过滤器来过滤想要的流量…...

【Uniapp-Vue3】v-if条件渲染及v-show的选择对比

如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show&#xff0c;使用方法和v-if一样&#xff0c;为true显示&#xff0c;为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外&#xff0c;还…...

宝塔面板使用 GoAccess Web 日志分析教程

宝塔面板是一个简单方便的服务器运维面板,但其网站统计功能是收费的。而 GoAccess 是一个用 C 编写的免费开源 Web日志分析器,本文将介绍如何在宝塔面板中开启 GoAccess Web 日志分析功能。 内容索引 下载安装 GoAccess在宝塔面板中添加日志切割的计划任务将 Web 日志输出到…...

Windows 安装 Docker 和 Docker Compose

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …...

导入表格数据做地图网站/网站推广哪家好

---------------------------------------------------------------------------------------- 转载于:https://www.cnblogs.com/xioxu/archive/2008/09/23/1297518.html...

ps怎么做网站首页和超链接/软文推广广告公司

解决Eclipse删除Tomcat8后无法新增问题参考文章&#xff1a; &#xff08;1&#xff09;解决Eclipse删除Tomcat8后无法新增问题 &#xff08;2&#xff09;https://www.cnblogs.com/chiying/p/5642657.html 备忘一下。...

王烨重生/百度seo优化服务项目

这个题就是让你求出S点到T点的第K短路&#xff0c; 使用A*搜索就可以&#xff0c; 搜索使用两个指标函数 h g, h表示从源点到当前点的最短路&#xff0c; g点表示从当前点到汇点的最短路&#xff0c; 搜索的时候v顶点第k次出队时的h就是第k短路的长度&#xff0c; 代码如下&…...

山西人工智能建站系统软件/淘宝店铺怎么引流推广

本节书摘来自异步社区《Android 应用案例开发大全&#xff08;第二版&#xff09;》一书中的第6章&#xff0c;第6.6节Android源代码与过滤器&#xff0c;作者李宁&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 6.6 Android源代码与过滤器Android开发权威指…...

怎么样推广最有效最快速/seo服务建议

日萌社 人工智能AI&#xff1a;Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战&#xff08;不定时更新&#xff09; CNN&#xff1a;RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN 自动驾驶&…...

手机网站建设是什么/百度一下你就知道手机版官网

本文主要总结线程共享数据的相关知识&#xff0c;主要包括两方面:一是某个线程内如何共享数据&#xff0c;保证各个线程的数据不交叉&#xff1b;一是多个线程间如何共享数据&#xff0c;保证数据的一致性。线程范围内共享数据自己实现的话&#xff0c;是定义一个Map,线程为键&…...