初学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;}
}
相关文章:
初学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…...
【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…...
Java(day7)
字符串练习 生成验证码 package day6; /*生成验证码 内容:可以是小写字母,也可以是大写字,还可以是数字 规则: 长度为5 内容中是四位字母,1位数字。 其中数字只有1位,但是可以出现在任意的位置。*/ impor…...
Word 转成pdf及打印的开源方案支持xp
Word转成pdf、打印的方案几乎没有免费开源的方案,现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装,点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...
LabVIEW软件侵权分析与应对
问:如果涉及到LabVIEW软件的仿制或模仿,特别是在功能、界面等方面,如何判断是否构成侵权?该如何应对? 答:LabVIEW软件的侵权问题,尤其是在涉及到仿制或模仿其功能、界面、设计等方面࿰…...
【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…...
[network]回顾:集线器(Hub)
集线器(Hub)的发明是计算机网络发展史上的一个重要里程碑。它最初的设计目的是为了解决局域网(LAN)中多台计算机共享网络资源的需求。 #mermaid-svg-OAmOmKYGAXoglS5z {font-family:"trebuchet ms",verdana,arial,sans-…...
79 Openssl3.0 RSA公钥加密数据
1 引言 最近不小心用到了openssl3.0,项目中需要使用rsa非对称加解密算法,所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。 之所以记录此篇文章,是因为网络上大多数是openssl3.0以前的版本的函数接口,而openssl3.0之后已经丢…...
EFCore HasDefaultValueSql (续2 HasComputedColumnSql)
前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...
阿里巴巴TransmittableThreadLocal使用指南
前言 ThreadLocal在上下文的数据传输上非常的方便和简洁。工业实践中,比较常用的有三个,ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,那么他们三个之间有什么区别呢? 常见的三种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…...
欧拉公式和傅里叶变换
注:英文引文机翻,未校。 中文引文未整理去重,如有异常,请看原文。 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报告名称
背景: 最近使用Jenkins搭建自动化测试环境时,使用Jenkins的allure插件生成的报告,一直显示默认ALLURE REPORT,想自定义成与项目关联的名称,如图所示,很明显自定义名称显得高大上些,之前…...
30天开发操作系统 第 12 天 -- 定时器 v1.0
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,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(位置名称: res.name);console.log(详细地…...
《PC 上的开源神经网络多模态模型:开启智能交互新时代》
《PC 上的开源神经网络多模态模型:开启智能交互新时代》 一、引言二、多模态模型基础剖析(一)核心概念解读(二)技术架构探秘 三、开源多模态模型的独特魅力(一)开源优势尽显(二&…...
Apache JMeter 压力测试使用说明
文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…...
腾讯云AI代码助手编程挑战赛-知识百科AI
作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发,让小朋友在一开始就对学习具有探索精神。在信息化时代下,会主动去学习自己认知以外的知识,同时丰富了眼界,开拓了新的知识。同时催生了在大数据时代下的信息共享化…...
【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述
前言 🌟🌟本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 &am…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

