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