之前曾经问过,当时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值
- }
|