你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f103双ADC同步规则模式两个ADC转换的通道数量能不一样吗

[复制链接]
yangmj 提问时间:2020-7-22 08:53 /
stm32f103rct6,配置成双ADC同步规则模式时,主ADC1、从ADC2,因为需要总共采集9路通道,便配置成ADC1转换5路通道,ADC2转换4路,结果发现数据会出现错乱的情况。这是什么原因啊,谢谢各位老哥了
收藏 评论5 发布时间:2020-7-22 08:53

举报

5个回答
李康1202 回答时间:2020-7-22 09:37:16
顶一下
mark.png
网络孤客 回答时间:2020-7-22 15:39:49
有代码吗?怎么配置的?
yangmj 回答时间:2020-7-23 09:38:02
ldptest 发表于 2020-7-22 15:39
有代码吗?怎么配置的?

        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);
heyiwei 回答时间:2020-11-11 16:23:06
老哥  我这个项目也是需要 ADC1两路,ADC2两路。。。。。。感觉配置的没啥问题,但是结果就是不太对!
哎哟喂123 回答时间:2020-11-18 16:37:36
同步规则通道应该一样长,ADC1和ADC2都为5路;并且ADC_DMACmd(ADC2,ENABLE);别忘了。同步模式下,ADC1为外部触发时,ADC2应配置为软件触发,防止意外触发ADC2,所以 ADC_ExternalTrigConvCmd(ADC2,ENABLE);可以删掉  

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版