ADC1采集4通道的12位电压值,通过DMA传输,电压偏差太大,不知道什么原因,求大神解答
以下是部分程序
[mw_shl_code=c,true]//初始化GPIO PA0,PA1,PA6,PA7作为采集通道
void MYADC_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_6|GPIO_Pin_7;//PA0 PA1 PA6 PA7
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AN;//模拟输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //浮空
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
void MYADC_Init_Config(void)
{
ADC_CommonInitTypeDef ADC_CommonInitStructrue;
ADC_InitTypeDef ADC_InitStructrue;
// 开启ADC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
ADC_CommonInitStructrue.ADC_Mode=ADC_Mode_Independent;//独立模式
ADC_CommonInitStructrue.ADC_Prescaler=ADC_Prescaler_Div4;//4分频
ADC_CommonInitStructrue.ADC_DMAAccessMode=ADC_DMAAccessMode_1;//DMA模式1
ADC_CommonInitStructrue.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_10Cycles;
ADC_CommonInit(&ADC_CommonInitStructrue);
ADC_InitStructrue.ADC_Resolution=ADC_Resolution_12b;
ADC_InitStructrue.ADC_ScanConvMode=ENABLE;//扫描模式
ADC_InitStructrue.ADC_ContinuousConvMode=ENABLE;//连续模式
ADC_InitStructrue.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;//不需要外部触发
ADC_InitStructrue.ADC_DataAlign=ADC_DataAlign_Right;//数据方向最右
ADC_InitStructrue.ADC_NbrOfConversion=4;//通道数量
ADC_Init(ADC1,&ADC_InitStructrue);
//转换的通道、顺序
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_56Cycles);//第一次转换通道0
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_56Cycles);//第二次转换通道1
ADC_RegularChannelConfig(ADC1,ADC_Channel_6,3,ADC_SampleTime_56Cycles);//第三次转换通道3
ADC_RegularChannelConfig(ADC1,ADC_Channel_7,4,ADC_SampleTime_56Cycles);//第四次转换通道4
ADC_Cmd(ADC1,ENABLE);//使能ADC
ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);// 使能DMA请求
ADC_DMACmd(ADC1,ENABLE);
ADC_SoftwareStartConv(ADC1);//开始adc转换,软件触发
}
[/mw_shl_code]
以下是main()函数部分内容
[mw_shl_code=c,true] for(i=0;i<2;i++)//通道0 1
{
ADC_Conversion_Value=(float)ADC_DMA_VALUE*(3.3/4096);
printf("ADC1的通道%d的电压值: %f
",i,ADC_Conversion_Value);
}
for(i=2;i<4;i++)//通道6 7
{
ADC_Conversion_Value=(float)ADC_DMA_VALUE*(3.3/4096);
printf("ADC1的通道%d的电压值: %f
",(i+4),ADC_Conversion_Value);
}
printf("
");[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>