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

[复制链接]
2075|5
 楼主| lee_hwa 发表于 2014-4-28 16:26 | 显示全部楼层 |阅读模式
之前曾经问过,当时AD和DMA配合出了问题,后来通过禁止外设等方法搞定了。
但是最近有了新问题,就是在AD采样的同时需要DA输出,只要加上DA,AD采集就乱套了。DA没用DMA,不知道怎么回事。就是        DAOutPut(u16Distance)这一句。
  1. int main(void)
  2.                 {
  3.                         u16 u16Distance,BlueToothSwtich=0;  
  4.                         g_u32LockCode=GetLockCode();
  5.                         InitializePeripherals();
  6.                         DisplayParameters();
  7.                         SetMaxMinDistance();
  8.                         u16Distance=g_u16MaxDistance;
  9.                 //        SZ_STM32_IWDGInit(1000);       
  10.                         while (1)
  11.                                 {   
  12.                                                 RxCounter1=0; //接收计数器清零
  13.                                                 BlueToothSwtich=WaitForBlueTooth();       
  14.                                                 if(BlueToothSwtich==1) break;
  15.             //u16Distance=890;                                               
  16.                                                 DisplayValue(u16Distance);               
  17.                                                 DAOutPut(u16Distance);    //DA输出,4-20mA
  18.                                                 Delay_ARMJISHU(8000000);        //每次发射的间隔时间
  19.                                                 TIM5_Init(10000,4200);    //使能发射 30k
  20.                                 //                IWDG_ReloadCounter();     //喂狗
  21.                                                 while (ADCStartFlag==1)
  22.                                          {
  23.                                                  ADCStartFlag=0;
  24.                                                  ADC_ClearFlag(ADC1,ADC_FLAG_OVR);        //必须要清除
  25.                                                  DMA_Cmd(DMA2_Stream0, ENABLE);         
  26.                                                  ADC_Config();       
  27.                                                  ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开始采集
  28.                                                  while(1) //传输结束,进行计算
  29.                                                  {
  30.                                                                 if(DMARecFlag==1)                                          
  31.                                                                 {  
  32.                                                                          DMARecFlag=0;                
  33.                                                                    u16Distance=CalculationDistance();
  34.                                                                    break;
  35.                                                                 }
  36.                                                  }                                          
  37.                                                  
  38.                                          }
  39.                                 }
  40.                         }
  41.                        
  42.                 }
  1. void DAC_Config(void)
  2. {
  3.   
  4.         //GPIO_InitTypeDef GPIO_InitStructure;
  5.         DAC_InitTypeDef  DAC_InitType;
  6.   DAC_InitType.DAC_Trigger=DAC_Trigger_None;        //不使用触发功能 TEN1=0
  7.         DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
  8.         DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
  9.         DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;        //DAC1输出缓存关闭 BOFF1=1
  10.   DAC_Init(DAC_Channel_1,&DAC_InitType);         //初始化DAC通道1
  11.   DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  12.   DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值

  13. }
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是要一直给输出的。这可怎么办
mmuuss586 发表于 2014-4-29 07:50 | 显示全部楼层
lee_hwa 发表于 2014-4-28 21:33
感觉上,AD和DMA工作时,其它外设就不能工作。可是DA是要一直给输出的。这可怎么办 ...

可能是你程序哪里逻辑上有点问题吧。
把出问题前后ADC的相关寄存器读出来看看,哪里被改写了
airwill 发表于 2014-4-29 11:38 | 显示全部楼层
总之数据差很多。只要有DA那句话。
如果运行正常, 只是 ADC 的结果噪声变大了, 我担心是外面硬件的噪声影响了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

147

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部