打印
[STM32F4]

请问mmuuss586等大侠F407的AD采样问题,非常感激。

[复制链接]
1857|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lee_hwa|  楼主 | 2014-4-28 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前曾经问过,当时AD和DMA配合出了问题,后来通过禁止外设等方法搞定了。
但是最近有了新问题,就是在AD采样的同时需要DA输出,只要加上DA,AD采集就乱套了。DA没用DMA,不知道怎么回事。就是        DAOutPut(u16Distance)这一句。
int main(void)
                {
                        u16 u16Distance,BlueToothSwtich=0;  
                        g_u32LockCode=GetLockCode();
                        InitializePeripherals();
                        DisplayParameters();
                        SetMaxMinDistance();
                        u16Distance=g_u16MaxDistance;
                //        SZ_STM32_IWDGInit(1000);       
                        while (1)
                                {   
                                                RxCounter1=0; //接收计数器清零
                                                BlueToothSwtich=WaitForBlueTooth();       
                                                if(BlueToothSwtich==1) break;
            //u16Distance=890;                                               
                                                DisplayValue(u16Distance);               
                                                DAOutPut(u16Distance);    //DA输出,4-20mA
                                                Delay_ARMJISHU(8000000);        //每次发射的间隔时间
                                                TIM5_Init(10000,4200);    //使能发射 30k
                                //                IWDG_ReloadCounter();     //喂狗
                                                while (ADCStartFlag==1)
                                         {
                                                 ADCStartFlag=0;
                                                 ADC_ClearFlag(ADC1,ADC_FLAG_OVR);        //必须要清除
                                                 DMA_Cmd(DMA2_Stream0, ENABLE);         
                                                 ADC_Config();       
                                                 ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开始采集
                                                 while(1) //传输结束,进行计算
                                                 {
                                                                if(DMARecFlag==1)                                          
                                                                {  
                                                                         DMARecFlag=0;                
                                                                   u16Distance=CalculationDistance();
                                                                   break;
                                                                }
                                                 }                                          
                                                 
                                         }
                                }
                        }
                       
                }
void DAC_Config(void)
{
  
        //GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef  DAC_InitType;
  DAC_InitType.DAC_Trigger=DAC_Trigger_None;        //不使用触发功能 TEN1=0
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;        //DAC1输出缓存关闭 BOFF1=1
  DAC_Init(DAC_Channel_1,&DAC_InitType);         //初始化DAC通道1
  DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值

}
沙发
mmuuss586| | 2014-4-28 17:38 | 只看该作者
没看出来啥问题;
你说的AD采集乱了啥意思,数值差很多?

有段程序改成这样简单点:
while(!DMARecFlag)
{
    u16Distance=CalculationDistance();
    DMARecFlag-0;
}

使用特权

评论回复
板凳
lee_hwa|  楼主 | 2014-4-28 21:31 | 只看该作者
mmuuss586 发表于 2014-4-28 17:38
没看出来啥问题;
你说的AD采集乱了啥意思,数值差很多?

对,不知道是AD采集并不对,还是DMA不对,总之数据差很多。只要有DA那句话。

使用特权

评论回复
地板
lee_hwa|  楼主 | 2014-4-28 21:33 | 只看该作者
感觉上,AD和DMA工作时,其它外设就不能工作。可是DA是要一直给输出的。这可怎么办

使用特权

评论回复
5
mmuuss586| | 2014-4-29 07:50 | 只看该作者
lee_hwa 发表于 2014-4-28 21:33
感觉上,AD和DMA工作时,其它外设就不能工作。可是DA是要一直给输出的。这可怎么办 ...

可能是你程序哪里逻辑上有点问题吧。
把出问题前后ADC的相关寄存器读出来看看,哪里被改写了

使用特权

评论回复
6
airwill| | 2014-4-29 11:38 | 只看该作者
总之数据差很多。只要有DA那句话。
如果运行正常, 只是 ADC 的结果噪声变大了, 我担心是外面硬件的噪声影响了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

147

帖子

1

粉丝