stm32f103rct6,配置成双ADC同步规则模式时,主ADC1、从ADC2,因为需要总共采集9路通道,便配置成ADC1转换5路通道,ADC2转换4路,结果发现数据会出现错乱的情况。这是什么原因啊,谢谢各位老哥了![]() ![]() |
顶一下
有代码吗?怎么配置的?
有代码吗?怎么配置的?
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period=1999; TIM_TimeBaseStructure.TIM_Prescaler=6; TIM_TimeBaseStructure.TIM_ClockDivision=0x0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//TIM4_CH4 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=300; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; TIM_OC4Init(TIM4,&TIM_OCInitStructure);//TIM4_CH4 DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32)ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr=(uint32)ADC_DualConvValueBuffer1; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=5; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel1,&DMA_InitStructure); //ADC1 configuration -Master ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode=ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T4_CC4; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=5; ADC_Init(ADC1,&ADC_InitStructure); ADC_RegularChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_15,2,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_9,3,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_8,4,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_2,5,ADC_SampleTime_71Cycles5); ADC_DMACmd(ADC1,ENABLE); //ADC2 configuration -Slave ADC_InitStructure.ADC_Mode=ADC_Mode_RegSimult; ADC_InitStructure.ADC_ScanConvMode=ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=4; ADC_Init(ADC2,&ADC_InitStructure); ADC_RegularChannelConfig(ADC2,ADC_Channel_0,1,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC2,ADC_Channel_5,2,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC2,ADC_Channel_7,3,ADC_SampleTime_71Cycles5); ADC_RegularChannelConfig(ADC2,ADC_Channel_6,4,ADC_SampleTime_71Cycles5); ADC_ExternalTrigConvCmd(ADC2,ENABLE); ADC_ExternalTrigConvCmd(ADC1,ENABLE); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_Cmd(ADC2,ENABLE); ADC_ResetCalibration(ADC2); while(ADC_GetResetCalibrationStatus(ADC2)); ADC_StartCalibration(ADC2); while(ADC_GetCalibrationStatus(ADC2)); DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE); DMA_Cmd(DMA1_Channel1,ENABLE);
老哥 我这个项目也是需要 ADC1两路,ADC2两路。。。。。。感觉配置的没啥问题,但是结果就是不太对!
同步规则通道应该一样长,ADC1和ADC2都为5路;并且ADC_DMACmd(ADC2,ENABLE);别忘了。同步模式下,ADC1为外部触发时,ADC2应配置为软件触发,防止意外触发ADC2,所以 ADC_ExternalTrigConvCmd(ADC2,ENABLE);可以删掉