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

devtools/2025/1/11 11:18:47/

目录

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;}
}


http://www.ppmy.cn/devtools/149598.html

相关文章

iPad编程新体验:如何用IDE Code App实现远程在线开发告别电脑束缚

文章目录 前言1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 前言 对于开发者来说&#xff0c;iPad 的强大性能让其在越来越…

Element UI与Element Plus:深度剖析

文章目录 前言一、概述二、技术特性三、设计理念四、使用体验五、迁移指南结语 前言 随着前端开发技术的快速发展&#xff0c;Vue.js 生态系统中的组件库也在不断进化。Element UI 和 Element Plus 是两个深受开发者喜爱的 Vue 组件库&#xff0c;它们分别构建于 Vue 2.x 和 V…

13_Redis Stream消息队列

1.Stream消息队列介绍 1.1 基本概念 Redis的Pub/Sub发布订阅模式虽然能够实现消息队列的功能,但存在一个显著局限性:它不支持消息持久化。因此,在网络连接中断或Redis服务发生故障时,消息会丢失。简而言之,Redis Pub/Sub能够有效地传递实时消息,但却无法保存历史消息记…

Clickhouse基础(一)

操作命令&#xff1a; sudo clickhouse start sudo clickhouse restart sudo clickhouse status进入clickhouse clickhouse-client -mCREATE TABLE db_13.t_assist (modelId UInt64,taskId UInt64,testNo String,tdId UInt64,eventDay String,eventDaytime UInt64,eventBatch …

Linux 高级路由 —— 筑梦之路

Linux 高级路由详解 本文将基于您提供的 Linux 高级路由极简教程 文章&#xff0c;深入探讨 Linux 高级路由的概念、配置方法以及应用场景。 一、什么是 Linux 高级路由&#xff1f; Linux 高级路由是指利用 Linux 内核提供的强大网络功能&#xff0c;实现超越传统路由表和默…

MYSQL重置密码

目录 1. 停止 MySQL 服务 2. 以跳过权限检查的方式启动 MySQL 3. 连接到 MySQL 4. 更新 root 用户密码 5. 重启 MySQL 服务 6. 使用新密码登录 注意事项 一些错误情况及解决方法 1.运行 net stop mysql 时提示“服务名无效” 2. “服务”管理器中无MYSQL 3.datadir 数…

第二篇:MySQL安装与配置(基于小皮面板(phpstudy))

在第一篇中介绍了数据库的相关概念&#xff0c;了解到SQL是用来操作数据库管理系统的语言&#xff0c;因此要学习数据库技术&#xff0c;数据库管理系统的配备是必不可少的&#xff01; 并且出于流行性与实惠性的双考量而选择MySQL这款数据库管理系统软件 一&#xff0c;工具推…

Django管理后台实现ECS服务管理:权限控制与重启功能

1. 引言 在现代Web应用开发中,管理ECS(Elastic Container Service)服务是一项常见且重要的运维任务。本文将详细介绍如何在Django管理后台中创建一个自定义的ECS服务管理界面,实现精细的权限控制和服务重启功能。我们将特别关注如何根据用户角色和服务特性来限制操作权限,…