stm32---DMA数据转运+AD多通道(针对DMA1通道和ADC1通道)

图文概述

stm32---DMA数据转运+AD多通道(针对DMA1通道和ADC1通道)_第1张图片

ADC转换模式(单次转换扫描模式)和DMA转运模式(不重装循环转运硬件触发源模式)

代码:

#include "stm32f10x.h"                  // Device header

/*对应的引脚号*/
#define AD1 GPIO_Pin_0 
#define AD2 GPIO_Pin_1 
#define AD3 GPIO_Pin_2 
#define AD4 GPIO_Pin_3 

/*模块需要使用到的端口:GPIOA 或 GPIOB */
#define BUS GPIOA         

//定义全局变量AD_Value数组,用来接收DMA转运的值
uint16_t AD_Value[4];

/**
  * @brief  AD_Init --- 对AD和DMA进行初始化配置(实现两者的互通)
  * @param  无
  * @retval 无
  */
void AD_Init(void)
{
	//1.配置APB2外设时钟和AHB外设的时钟:ADC1通道和GPIOA通道和DMA1通道
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
	
	//2.配置ADCCLK: 选择了6分频,即 72MHz / 6 = 12MHz
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
	//3.配置模拟输入的引脚号
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //模拟输入模式
	GPIO_InitStructure.GPIO_Pin = AD1 | AD2 | AD3 | AD4;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(BUS, &GPIO_InitStructure);
	
	//4.选择规则组的输入通道---存放4组通道依次在规则组的序列1,2,3,4
	/*
	ADC_RegularChannelConfig:
		1.ADC1 --- 选择哪个ADC外围
		2.ADC_Channel --- 指定选择哪个ADC通道
		3.1 --- 选择规则组中存放的序列号
		4.ADC_SampleTime_55Cycles5 --- 指定通道的采样时间(55.5个ADCCLK周期)
	*/
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_55Cycles5);
	
	//5.初始化ADC
	ADC_InitTypeDef ADC_InitStructure;
	ADC_InitStructure.ADC_Mode = AD

你可能感兴趣的:(stm32,嵌入式硬件,单片机)