大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-11-9
|
楼主 |
发表于 2018-7-28 12:05:15
|
显示全部楼层
DMA方式
u16 ADC_Value[2]={0,0};
void MYADC_DMAInit(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
//DMA初始化
DMA_InitStructure.DMA_BufferSize=2; //CNDTR设为1000;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //外设到存储器
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_Value; //数据存储地址
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; //半字,16位
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //存储地址自增
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; //循环传输
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR;//0x4001244c; //ADC
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; //外设地址不自增
DMA_InitStructure.DMA_Priority=DMA_Priority_Medium; //通道优先级/
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
}
void MyADC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8); //ADC设为8分频即ADCCLK=72/8=9MHz
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; //非连续转换
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //非外部出发,选择软件触发
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; // 独立模式
ADC_InitStructure.ADC_NbrOfChannel=2; //规则通道序列长度设为3,包含一个内部温度,一个外部采样,一个光强度采样
ADC_InitStructure.ADC_ScanConvMode=ENABLE; //非扫描模式
ADC_Init(ADC1,&ADC_InitStructure);
ADC_TempSensorVrefintCmd(ENABLE); //使能内部温度传感器
ADC_DMACmd(ADC1,ENABLE);
ADC_Cmd(ADC1,ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); //复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准完成
ADC_StartCalibration(ADC1); //启动校准
while(ADC_GetCalibrationStatus(ADC1)); //等待启动校准完成
// DMA_ITConfig(DMA1_Channel1,DMA_IT_TC|DMA_IT_TE,ENABLE); //开启通道传输完成中中断和传输错误中断
//配置通道转换
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_16,2,ADC_SampleTime_239Cycles5);
//开启转换
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
} |
|