各位大佬帮忙看看,到底什么问题。ST芯片是正常的
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_BuffDataIni();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_DMA_Configuration();
//RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M 最大14M
RCC_ADCCLKConfig(RCC_PCLK2_Div8); //18/4 = 4.5M 提高转换精度
//RCC_GetClocksFreq(&RCC_Clocks);
ADC_DeInit(ADC1);
//ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //独立模式
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数据右对齐
ADC_InitStructure.ADC_NbrOfChannel=CHANNEL_SUM; //采样通道数
ADC_Init(ADC1,&ADC_InitStructure);
//ADC_TempSensorVrefintCmd(ENABLE);
//SYSCFG_VBATMonitoringCmd(ENABLE); //激活电池监控
//ADC_TempSensorVrefintCmd(ENABLE); //开启内部参考电压通道
/*///////////adc输入/////////////////
PA2 ADCIN1 REF 2.5V
PA3 ADCIN2 TEMP
PA4 ADCIN4 AN1
PA5 ADCIN5 AN2
PA6 ADCIN6 AN3
PA7 ADCIN7 AN4
PC4 ADCIN14 AN5
PC5 ADCIN15 AN6
PB0 ADCIN8 AN7
PB1 ADCIN9 AN8
*/
// ADC_SampleTime_239Cycles5 239.5+12.5 = 252 4.5M CLK = 56us采样时间*10 = 560us 20ms内采样 35.7个数值 //9M CLK = 28us采样时间*10 = 280us 20ms内采样 71.4个数值
ADC_RegularChannelConfig(ADC1,ADC_Channel_4,1,ADC_SampleTime_239Cycles5); //PA4 //ADIN1
ADC_RegularChannelConfig(ADC1,ADC_Channel_5,2,ADC_SampleTime_239Cycles5); //PA5 //ADIN2
ADC_RegularChannelConfig(ADC1,ADC_Channel_6,3,ADC_SampleTime_239Cycles5); //PA6 //ADIN3
ADC_RegularChannelConfig(ADC1,ADC_Channel_7,4,ADC_SampleTime_239Cycles5); //PA7 //ADIN4
ADC_RegularChannelConfig(ADC1,ADC_Channel_14,5,ADC_SampleTime_239Cycles5); //PC4 //ADIN5
ADC_RegularChannelConfig(ADC1,ADC_Channel_15,6,ADC_SampleTime_239Cycles5); //PC5 //ADIN6
ADC_RegularChannelConfig(ADC1,ADC_Channel_8,7,ADC_SampleTime_239Cycles5); //PB0 //ADIN7
ADC_RegularChannelConfig(ADC1,ADC_Channel_9,8,ADC_SampleTime_239Cycles5); //PB1 //ADIN8
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,9,ADC_SampleTime_239Cycles5); //PA3 //机内温度
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,10,ADC_SampleTime_239Cycles5); //PA2 //参考电源
//////////////////使能ADC1通道DMA请求//////////////////////////////////////
ADC_DMACmd(ADC1,ENABLE);//重要
Delay_ms(1000);
///////////////////启动ADC1////////////////////////////////////////////////
ADC_Cmd(ADC1,ENABLE);
/////////////////进行ADC校准 上电后需校准/////////////////////////////////
//////////////重置ADC校准寄存器 进行初始化/////////////////////////////////
ADC_ResetCalibration(ADC1);
//////////////等待ADC校准寄存器初始化完成//////////////////////////////////
while(ADC_GetResetCalibrationStatus(ADC1));
//////////////开始进行ADC1校准/////////////////////////////////////////////
ADC_StartCalibration(ADC1);
//////////////等待ADC1校准完成/////////////////////////////////////////////
while(ADC_GetCalibrationStatus(ADC1));
Delay_ms(1000);
////////////////////开始软件触发进行转换///////////////////////////////////
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
//ADC_SoftwareStartConv(ADC1);
// gADC_Timer = ADC_CalculationTimer(); //10MS计算一个数值
}
void ADC_DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)gADC_DMAValue;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //外设作为数据传输的来源
DMA_InitStructure.DMA_BufferSize=ADC_BUFF_SUM; //缓存数量
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; //外设数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; //内存数据宽度为16位
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; //工作在循环缓存模式
DMA_InitStructure.DMA_Priority=DMA_Priority_High; //DMA通道x拥有高优先级
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE); //传输完成产生中断 //7.8ms更新
DMA_ClearITPendingBit(DMA1_IT_TC1);
DMA_Cmd(DMA1_Channel1,ENABLE);
}
|