初学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(中文版).pdf,11.12.2节
ADC控制寄存器 2(ADC_CR2)
ADC采样时间寄存器1(ADC_SMPR1)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.4节
ADC采样时间寄存器2(ADC_SMPR2)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.5节
ADC规则序列寄存器 1(ADC_SQR1)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.9节
ADC规则序列寄存器 2(ADC_SQR2)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.10节
ADC规则序列寄存器 3(ADC_SQR3)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.11节
ADC规则数据寄存器 (ADC_DR)
摘自:STM32F10xxx参考手册_V10(中文版).pdf,11.12.14节
ADC状态寄存器(ADC_SR)
单通道ADC采集实验配置步骤
1,配置ADC工作参数、ADC校准
HAL_ADC_Init()、HAL_ADCEx_Calibration_Start()
2,ADC MSP初始化
HAL_ADC_MspInit() 配置NVIC、CLOCK、GPIO等
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,将DMA和ADC句柄联系起来
__HAL_LINKDMA()
3,配置ADC工作参数、ADC校准
HAL_ADC_Init()、HAL_ADCEx_Calibration_Start()
4,ADC MSP初始化
HAL_ADC_MspInit() 配置NVIC、CLOCK、GPIO等
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;}
}
相关文章:
![](https://i-blog.csdnimg.cn/direct/a6154f759bde4746a3f9fb9cf36fd579.png)
初学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) AD…...
![](https://i-blog.csdnimg.cn/direct/7de4d9daf3a941b48950ea249e369d14.png)
【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…...
![](https://i-blog.csdnimg.cn/direct/6829a8cb3f6049c8aebf031cddbc4378.png)
Java(day7)
字符串练习 生成验证码 package day6; /*生成验证码 内容:可以是小写字母,也可以是大写字,还可以是数字 规则: 长度为5 内容中是四位字母,1位数字。 其中数字只有1位,但是可以出现在任意的位置。*/ impor…...
![](https://www.ngui.cc/images/no-images.jpg)
Word 转成pdf及打印的开源方案支持xp
Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装,点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...
![](https://i-blog.csdnimg.cn/img_convert/bfe0127353ce5c2acb94ab100f284b9f.png)
LabVIEW软件侵权分析与应对
问:如果涉及到LabVIEW软件的仿制或模仿,特别是在功能、界面等方面,如何判断是否构成侵权?该如何应对? 答:LabVIEW软件的侵权问题,尤其是在涉及到仿制或模仿其功能、界面、设计等方面࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
【redis】centos7下安装redis7
在CentOS 7下安装Redis7可以通过以下两种方法实现:手动编译安装和使用YUM进行安装。 CentOS 7系统的环境和版本: $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)手动编译安装 参考官方文档:https://redis.io/docs/lates…...
![](https://www.ngui.cc/images/no-images.jpg)
[network]回顾:集线器(Hub)
集线器(Hub)的发明是计算机网络发展史上的一个重要里程碑。它最初的设计目的是为了解决局域网(LAN)中多台计算机共享网络资源的需求。 #mermaid-svg-OAmOmKYGAXoglS5z {font-family:"trebuchet ms",verdana,arial,sans-…...
![](https://www.ngui.cc/images/no-images.jpg)
79 Openssl3.0 RSA公钥加密数据
1 引言 最近不小心用到了openssl3.0,项目中需要使用rsa非对称加解密算法,所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。 之所以记录此篇文章,是因为网络上大多数是openssl3.0以前的版本的函数接口,而openssl3.0之后已经丢…...
![](https://www.ngui.cc/images/no-images.jpg)
EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...
![](https://i-blog.csdnimg.cn/direct/74649bf27e494a62abfcf5e733fba449.png)
阿里巴巴TransmittableThreadLocal使用指南
前言 ThreadLocal在上下文的数据传输上非常的方便和简洁。工业实践中,比较常用的有三个,ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,那么他们三个之间有什么区别呢? 常见的三种ThreadLocal比较 ThreadLoc…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://i-blog.csdnimg.cn/img_convert/7f2d984876df26967b09b948deb14e0a.png)
欧拉公式和傅里叶变换
注:英文引文机翻,未校。 中文引文未整理去重,如有异常,请看原文。 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 …...
![](https://i-blog.csdnimg.cn/direct/04d31fa600584d3886b77b92ab5c6122.png)
Jenkins内修改allure报告名称
背景: 最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些,之前…...
![](https://i-blog.csdnimg.cn/direct/22456d20c2164811bab1d7b50a65bf5b.png)
30天开发操作系统 第 12 天 -- 定时器 v1.0
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://i-blog.csdnimg.cn/direct/5dfd114a2b1c4512ae15149d2806c3df.png)
uniapp使用chooseLocation安卓篇
本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称: res.name);console.log(详细地…...
![](https://www.ngui.cc/images/no-images.jpg)
《PC 上的开源神经网络多模态模型:开启智能交互新时代》
《PC 上的开源神经网络多模态模型:开启智能交互新时代》 一、引言二、多模态模型基础剖析(一)核心概念解读(二)技术架构探秘 三、开源多模态模型的独特魅力(一)开源优势尽显(二&…...
![](https://i-blog.csdnimg.cn/direct/0a47b689d0a2499ab67fbc7e3a377fd7.png)
Apache JMeter 压力测试使用说明
文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…...
![](https://i-blog.csdnimg.cn/direct/9787647fc3ef47d09987f4ceb6202b13.png)
腾讯云AI代码助手编程挑战赛-知识百科AI
作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发,让小朋友在一开始就对学习具有探索精神。在信息化时代下,会主动去学习自己认知以外的知识,同时丰富了眼界,开拓了新的知识。同时催生了在大数据时代下的信息共享化…...
![](https://i-blog.csdnimg.cn/direct/ad9f17b3ac6f40f988fa8c885e5e6163.png)
【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
前言 🌟🌟本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &am…...
![](https://i-blog.csdnimg.cn/direct/d356be18697e439db09e902751d2b9ac.png)
HTTP-响应协议
HTTP的响应过程? 浏览器请求数据--》web服务器过程:请求过程 web服务器将响应数据-》到浏览器:响应过程 响应数据有哪些内容? 1.和请求数据类似。 2. 响应体中存储着web服务器返回给浏览器的响应数据。并且注意响应头和响应体之间…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL进阶实战技巧:即时订单比例问题
目录 0 需求描述 1 数据准备 2 问题分析 3 小结 往期精彩 0 需求描述 订单配送中,如果期望配送日期和下单日期相同,称为即时订单,如果期望配送日期和下单日期不同,称为计划订单。 请从配送信息表(delivery_info)中求出每个用户的首单(用户的第一个订单)中即时订单…...
![](https://www.ngui.cc/images/no-images.jpg)
什么是端口
端口是用来区分同一网络设备(IP地址)上运行的不同服务或应用程序接收外部数据的窗口。 以下是几个要点: 对于我们发送请求指定的url中的端口,指的是对方服务器的用于接收数据的端口,如http的80端口,服务器通常都会设定要监听来自…...
![](https://www.ngui.cc/images/no-images.jpg)
【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据
需求/背景 在我们的业务场景中,列表的加载使用easy_refresh组件: https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载,可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…...
![](https://www.ngui.cc/images/no-images.jpg)
【2025 Rust学习 --- 11 实用工具特型01】
清理特型Drop 当一个值的拥有者消失时,Rust 会丢弃(drop)该值。丢弃一个值就必须释放 该值拥有的任何其他值、堆存储和系统资源。 丢弃可能发生在多种情况下: 当变量超出作用域时;在表达式语句的末尾;当…...
![](https://www.ngui.cc/images/no-images.jpg)
网络安全基础以及概念
1. 安全领域的概念 1.1 网络产品 1. EDR:终端检测与响应(Endpoint Detection and Response),终端主要包括我们的笔记本、台式机、手机、服务器等,EDR是一种运行在终端上安全软件,主要负责监控网络流量、可疑进程、注册表活动等其他安全相关的事件与活动。当发现有威胁是自…...
![](https://i-blog.csdnimg.cn/direct/797b5b8fa9ee493ca6dfd10d5737dfb9.png)
windows和linux的抓包方式
1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...
![](https://i-blog.csdnimg.cn/direct/422ead50044540f398efc9f2ea3a543a.png)
【Uniapp-Vue3】v-if条件渲染及v-show的选择对比
如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show,使用方法和v-if一样,为true显示,为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外,还…...
![](https://www.ngui.cc/images/no-images.jpg)
宝塔面板使用 GoAccess Web 日志分析教程
宝塔面板是一个简单方便的服务器运维面板,但其网站统计功能是收费的。而 GoAccess 是一个用 C 编写的免费开源 Web日志分析器,本文将介绍如何在宝塔面板中开启 GoAccess Web 日志分析功能。 内容索引 下载安装 GoAccess在宝塔面板中添加日志切割的计划任务将 Web 日志输出到…...
![](https://i-blog.csdnimg.cn/img_convert/38dc07ec26712c3806fc49a8d21e27c9.png)
Windows 安装 Docker 和 Docker Compose
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
![](/images/no-images.jpg)
导入表格数据做地图网站/网站推广哪家好
---------------------------------------------------------------------------------------- 转载于:https://www.cnblogs.com/xioxu/archive/2008/09/23/1297518.html...
![](/images/no-images.jpg)
ps怎么做网站首页和超链接/软文推广广告公司
解决Eclipse删除Tomcat8后无法新增问题参考文章: (1)解决Eclipse删除Tomcat8后无法新增问题 (2)https://www.cnblogs.com/chiying/p/5642657.html 备忘一下。...
![](/images/no-images.jpg)
王烨重生/百度seo优化服务项目
这个题就是让你求出S点到T点的第K短路, 使用A*搜索就可以, 搜索使用两个指标函数 h g, h表示从源点到当前点的最短路, g点表示从当前点到汇点的最短路, 搜索的时候v顶点第k次出队时的h就是第k短路的长度, 代码如下&…...
![](https://yqfile.alicdn.com/9f9a1a4103f441be24cf9f979a1edb5cb13967b9.png)
山西人工智能建站系统软件/淘宝店铺怎么引流推广
本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第6章,第6.6节Android源代码与过滤器,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.6 Android源代码与过滤器Android开发权威指…...
![](https://img-blog.csdnimg.cn/20200714113500724.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ppbWlhbzU1MjE0NzU3Mg==,size_16,color_FFFFFF,t_70)
怎么样推广最有效最快速/seo服务建议
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN 自动驾驶&…...
![](/images/no-images.jpg)
手机网站建设是什么/百度一下你就知道手机版官网
本文主要总结线程共享数据的相关知识,主要包括两方面:一是某个线程内如何共享数据,保证各个线程的数据不交叉;一是多个线程间如何共享数据,保证数据的一致性。线程范围内共享数据自己实现的话,是定义一个Map,线程为键&…...