STM32F767多通道ADC采集+DMA传输

一、ADC简介

TM32F767xx系列有3个ADC,这些ADC可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F767的ADC是12位逐次逼近型的模拟数字转换器。它有19个通道,可测量16个外部源、2个内部源和Vbat通道的信号。我使用的是STM32F767IGT6

1、ADC采样频率

不要让ADC的时钟超过36M,否则将导致结果准确度下降。STM32F767的ADC最大工作频率是36Mhz,而ADC时钟(ADCCLK)来自APB2,APB2频率一般是108Mhz,我们设置ADCPRE=01,即4分频,这样得到ADCCLK频率为27Mhz

2、ADC转换时间

ADC的转换时间: 总转换时间(Tcovn)=采样时间+12个周期
例如,当ADCCLK=27Mhz的时候,并设置3个周期的采样时间,则得到:Tcovn=3+12=15个周期=0.55us。
stm32f767的采样时间周期可以在stm32f7xx_hal_adc.h中选择,可以选择3~480个周期的采样时间。如下图所示:
在这里插入图片描述

3、ADC寄存器

ADC里面用到的寄存器有很多,常用的有以下几个,具体使用方法就不一一介绍了
在这里插入图片描述

4、ADC引脚与外部通道对应关系

在这里插入图片描述

二、DMA简介

DMA 全称Direct Memory Access,即直接存储器访问。
DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。
DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。

STM32最多有2个DMA控制器,2个DMA控制器总共有16个数据流(每个控制器8个)。每个DMA控制器都用于管理一个或者多个外设的存储器访问请求。

三、代码配置

1、ADC、DMA初始化配置

我将它们都配置在了adc.c文件中,代码如下所示:

			#include "adc.h"
			#include "delay.h"
			#include "usart.h"
			#include "sdram.h"
			#include "led.h"
			#include "lcd.h"
			
			#define M 8 //定义M
			#define N 4
			u16  value[N][M];
			uint32_t ADC_ConvertedValueRead[4];
			uint32_t ADC_ConvertedValue[4];
			
			ADC_HandleTypeDef  ADC1_Handler;       //ADC句柄
			DMA_HandleTypeDef  ADC1TxDMA_Handler;      //DMA句柄
			
			
			//初始化ADC
			void MY_ADC_Init(void)
			{ 
			     ADC_ChannelConfTypeDef ADC1_ChanConf;
					
				//GPIO初始化
				GPIO_InitTypeDef GPIO_Initure;
			    __HAL_RCC_ADC1_CLK_ENABLE();      
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值