STM32—ADC和DMA的应用之电流检测(第一部分:ADC和DMA的配置)
创始人
2024-11-09 20:08:45
0

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、ADC基本介绍
    • 1、ADC是什么
    • 2、ADC的供电和基准电压
    • 3、ADC通道
  • 二、DMA的基本介绍
  • 三、ADC和DMA的配置
    • 1、配置GPIO端口
    • 2、配置DMA_InitTypeDef 结构体
    • 3、void DMA_DeInit(DMA_Channel_TypDef*DMAy_Channelx)
    • 4、void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct)
    • 5、void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)
    • 6、配置ADC结构体
    • 7、void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
    • 8、void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
    • 9、void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
    • 10、void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
    • 11、void ADC_ResetCalibration(ADC_TypeDef* ADCx)
    • 12、void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
    • 13、void ADC_StartCalibration(ADC_TypeDef* ADCx)
    • 14、FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
    • 15、FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)

前言

最近做的项目需要检测电压和电流,所以学习了一下ADC和DMA。此文章以检测电流为例,从ADC、DMA、的配置,数据的采集和数据的处理几个方面介绍以STM32F103为控制器的完整开发过程。


一、ADC基本介绍

1、ADC是什么

ADC是Analog-to-DigitalConverter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。

2、ADC的供电和基准电压

ADC供电电源由VDDA和VSSA提供,ADC 的参考电压都是通过 Vref+ 引脚提供的并作为ADC转换器的基准电压。ADC所能测量的电压范围就是VREF-≤ VIN ≤ VREF+,把VSSA 和VREF-接地,把VREF+和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。对于100脚以下的芯片,STM32没有把VREF引脚引出来,所以,我们只能把基准电压芯片连接到VDDA引脚。注意,STM32单片机上面有好多电源引脚,其中有若干VDD引脚,只有一个 VDDA 引脚,VDDA 引脚就是模拟供电引脚。不过,需要注意,VDDA的电压不是随便定义的。例如,STM32F051系列单片机就规定,VDDA必须要大于或者等于VDD才可以正常工作,所以这时候,最好是给单片机3.0V供电,再给VDDA采用一个3.3V的基准电压芯片供电。
在这里插入图片描述

3、ADC通道

STM32F103带3个ADC控制器,一共支持23个通道,包括21个外部和2个内部信号源;但是每个ADC控制器最多只可以有18个通道,包括16个外部和2个内部信号源
在这里插入图片描述

二、DMA的基本介绍

DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输,而不用经过CPU。对于STM32F10X系列芯片有2个DMA控制器 两个DMA控制器,DMA1有7个通道,DMA2有5个通道。
在这里插入图片描述
在这里插入图片描述
DMA读取ADC数据过程:
1、DMA传输时外设对DMA控制器发出请求。
2、DMA控制器收到请求,触发DMA工作。
3、DMA控制器从AHB外设获取ADC采集的数据,存储到DMA通道中
4、DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC采集的数据经由DMA通道存放到SRAM中,这个数据的传输过程中,完全不需要内核的参与,也就是不需要CPU的参与,

三、ADC和DMA的配置

1、配置GPIO端口

开启ADC和ADC I/O端口的时钟,设置ADC检测电流信号引脚为模拟输入模式。
示例:

void Bsp_ADCGpio_Config() {     	GPIO_InitTypeDef GPIO_InitStructure;  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE); 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC1时钟  	RCC_ADCCLKConfig(RCC_PCLK2_Div6);// 这条语句的用于降低 ADC 采集速度, 	//其作用实际上就是对 ADC 时钟进行 6 分频,提升 AD 采集的精确度。 	 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 	GPIO_Init(GPIOA, &GPIO_InitStructure); } 

2、配置DMA_InitTypeDef 结构体

DMA_InitTypeDef 定义于文件“stm32f10x_dma.h”:

typedef struct  {      	u32 DMA_PeripheralBaseAddr;  	u32 DMA_MemoryBaseAddr;  	u32 DMA_DIR;  	u32 DMA_BufferSize;  	u32 DMA_PeripheralInc;  	u32 DMA_MemoryInc;  	u32 DMA_PeripheralDataSize;  	u32 DMA_MemoryDataSize;  	u32 DMA_Mode;  	u32 DMA_Priority;  	u32 DMA_M2M;  } DMA_InitTypeDef; 

示例:

DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&(ADC1->DR));	 		 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;	 DMA_InitStructure.DMA_DIR =

相关内容

热门资讯

针对!微信新众游辅助(辅助)果... 针对!微信新众游辅助(辅助)果然是真的有辅助教程(有挂细节)1、游戏颠覆性的策略玩法,独创攻略技巧玩...
黑科技辅助挂!微信牵手跑的快辅... 黑科技辅助挂!微信牵手跑的快辅助(辅助)竟然真的是有辅助器(今日头条)小薇(辅助器软件下载)致您一封...
据公告内容!乐酷大厅怎么安装(... 据公告内容!乐酷大厅怎么安装(辅助)一直是有辅助软件(真是有挂)1、完成乐酷大厅怎么安装有辅助插件,...
今年以来!新超圣辅助靠谱不(辅... 今年以来!新超圣辅助靠谱不(辅助)好像是真的有辅助教程(有挂神器)1、全新机制【新超圣辅助靠谱不ai...
据权威媒体报道!老友赣州麻将破... 据权威媒体报道!老友赣州麻将破解版(辅助)果然是有辅助神器(有挂猫腻)1、玩家可以在老友赣州麻将破解...
此事引发网友热议!闲聚鱼虾蟹软... 此事引发网友热议!闲聚鱼虾蟹软件脚本(辅助)真是真的是有辅助挂(有挂技术)1、用户打开应用后不用登录...
事发当天!边锋干瞪眼辅助器(辅... 事发当天!边锋干瞪眼辅助器(辅助)真是存在有辅助方法(有挂实锤)1、边锋干瞪眼辅助器免费辅助多个强度...
为了进一步!欢乐联盟免费辅助(... 为了进一步!欢乐联盟免费辅助(辅助)一直是有辅助软件(有挂助手)运欢乐联盟免费辅助辅助工具,进入游戏...
复盘辅助挂!和和营口辅助(辅助... 复盘辅助挂!和和营口辅助(辅助)果然是真的有辅助器(今日头条)和和营口辅助是不是有人用挂微扑克wpk...
技巧辅助挂!极速摇一摇鱼虾蟹辅... 技巧辅助挂!极速摇一摇鱼虾蟹辅助(辅助)一贯确实有辅助软件(有挂神器)极速摇一摇鱼虾蟹辅助透视方法中...