#include"stm32f10x.h"
#include"adc.h"
#define BUF_SIZE 4
extern u16 ADC_Value[BUF_SIZE];
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1,ENABLE ); //使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC最大时间不能超过14M
//PA0/1/2/3 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //每个ADC独立工作
ADC_InitStructure.ADC_ScanConvMode=ENABLE; //扫描所有开启的通道
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; //开启连续采集模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //无外部触发,由软件控制
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; // 转换数据右对齐
ADC_InitStructure.ADC_NbrOfChannel=4; //总的采集通道数量
ADC_Init(ADC1,&ADC_InitStructure);
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,4,ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1,ENABLE);//使能ADC1的DMA
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1); //ADC1复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //检测ADC1的复位校准是否结束
ADC_StartCalibration(ADC1);//启动ADC1校准
while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准结束
}
void DMA_Configuration()
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA传输
DMA_DeInit(DMA1_Channel1);//ADC1对应DMA1的第一通道
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR;//自己定义外设地址
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADC_Value;//目的地址
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//单向传输,DST双向传输
DMA_InitStructure.DMA_BufferSize=BUF_SIZE;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设递增禁止
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存递增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//十六位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//连续不断的循环模式
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//优先级高
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//禁止内存到内存模式
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);//打开DMA
ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件启动ADC1转换,必须在配置好DMA以后
}
最后一通道的电压值怎么不变呢?
|