📄 measure_main.c
字号:
TIM_TimeBaseStructure.TIM_Prescaler = 10;
else
TIM_TimeBaseStructure.TIM_Prescaler = 25;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* Output Compare Toggle Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
TIM_OCInitStructure.TIM_Pulse = 0x80; //0x7D00;//0x1FFF;
TIM_OCInit(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_SetCompare2(TIM2, 400);
TIM_GenerateEvent(TIM2, TIM_IT_CC2);
TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
/* ADC1 configuration ------------------------------------------------------*/
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC1 regular channel11 configuration */
if(FFT_Port == 3)
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5);
else
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_13Cycles5);
/* Enable ADC1 external trigger */
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 reset calibaration register */
ADC_ResetCalibration(ADC1);
/* Check the end of ADC1 reset calibration register */
while(ADC_GetResetCalibrationStatus(ADC1));
/* Start ADC1 calibaration */
ADC_StartCalibration(ADC1);
/* Check the end of ADC1 calibration */
while(ADC_GetCalibrationStatus(ADC1));
/* TIM1 counter enable */
TIM_Cmd(TIM2, ENABLE);
FFTState.enabled = TRUE;
while (FFT_Index < N_SAMPLE);
FFT_Index = 0;
/* TIM1 counter disable */
TIM_Cmd(TIM2, DISABLE);
ADC_ITConfig(ADC1, ADC_IT_EOC, DISABLE);
FFTState.enabled = TRUE;
FFTState.process_ready = FALSE;
// SendTask->Process = 2;
ReEntryProcess = FFT;
ReEntry.enabled = TRUE;
}
/*-----------------------------------------------------------------------------------*/
void CommMeasFFT (void)
{
u16 i = 0;
s32 value = 0;
CommTask->CommandNew = FALSE;
switch (CommTask->Command) {
case Cmd_Get_Temp : /* GUI Status request of the Temp enabled */
ADC_TempSensorVrefintCmd(ENABLE);
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
value = ADC_GetConversionValue(ADC1);
value = (1480-(value*3300)/4095)/2+50;
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
ADC_Cmd(ADC1, DISABLE);
SendTask->DataLength = 1;
if(value > 100)
value = 100;
if(value < 0)
value = 0;
protocol_SendFrame (Rep_Info_Temp, (u8 *)&value,1);
break;
case Cmd_Get_VU1 : /* GUI Status request of the VU enabled */
SendTask->Data[0] = (u8)VU1State.enabled+1;
SendTask->Data[2] = 0x00;
SendTask->Data[1] = 0x00;
if(VU1State.enabled == TRUE)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
value = ADC_GetConversionValue(ADC1);
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
ADC_Cmd(ADC1, DISABLE);
SendTask->Data[2] = (u8)(value>>8);
SendTask->Data[1] = (u8)value;
}
protocol_SendFrame (Rep_Info_VU1, (u8 *)&SendTask->Data,3);
break;
case Cmd_Enable_VU1 : /* GUI Start/Stop the VU */
SendTask->ReplyNew = FALSE;
CommTask->Command = Cmd_Idle; /* none */
if (CommTask->Data[0] == TaskSwitchOn)
{
if (VU1State.enabled == FALSE)
VU1Start();
}
else
{
VU1Stop();
}
break;
case Cmd_Get_Amb_Light : /* GUI Status request of the Ambi enabled */
SendTask->Data[0] = (u8)AmbState.enabled+1;
SendTask->Data[2] = 0x00;
SendTask->Data[1] = 0x00;
if (AmbState.enabled == TRUE)
{
ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);
ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
value = ADC_GetConversionValue(ADC1);
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
value = (value << 1)-0x400; /*scaling +ofset*/
ADC_Cmd(ADC1, DISABLE);
SendTask->Data[2] = (u8)(value>>8);
SendTask->Data[1] = (u8)value;
}
protocol_SendFrame (Rep_Info_Amb_Light, (u8 *)&SendTask->Data,3);
break;
case Cmd_Enable_Amb_Light : /* GUI Start/Stop the Ethernet */
CommTask->Command = Cmd_Idle; /* none */
if (CommTask->Data[0] == TaskSwitchOn)
{
AmbStart();
}
else
{
AmbStop();
}
break;
case Cmd_Get_Trigger : /* */
protocol_SendFrame (Rep_Info_Trigger, (u8 *)&TriggerSource,1);
break;
case Cmd_Set_Trigger : /* */
TriggerSource = SendTask->Data[0];
break;
case Cmd_Get_Scanner : /* */
protocol_SendFrame (Rep_Info_Scanner, (u8 *)(ScanState.enabled+1),1);
break;
case Cmd_Enable_Scanner : /* */
CommTask->Command = Cmd_Idle; /* none */
if (CommTask->Data[0] == 0x02)
{
/*stop lightmeter*/
AmbStop();
/*stop Voltmeter*/
VU1Stop();
/*stop counter */
CounterStop();
ScanStart();
}
else if(CommTask->Data[0] == 0x04)
{
/*stop lightmeter*/
AmbStop();
/*stop Voltmeter*/
VU1Stop();
/*stop scanner*/
ScanStop();
CounterStart();
}
else
{
ScanStop();
CounterStop();
AmbStart(); /*start lightmeter*/
VU1Start(); /*start voltmeter*/
}
break;
case Cmd_Get_Meassurement : /* */
if(CounterState.enabled !=FALSE)
{
protocol_DWSendFrame (Rep_Info_Meassurement, &event_counter,4);
}
else if(ScanState.enabled !=FALSE)
{
protocol_DWSendFrame (Rep_Info_Meassurement, &frequency,4);
}
else
{
value = 0;
protocol_DWSendFrame (Rep_Info_Meassurement, (u32*)&value,4);
}
break;
case Cmd_Get_Oversampling : /* */
protocol_SendFrame (Rep_Info_Oversampling, (u8 *)(OversamplingState.enabled+1),1);
break;
case Cmd_Enable_Oversampling : /* */
CommTask->Command = Cmd_Idle; /* none */
if (CommTask->Data[0] == TaskSwitchOn)
{
OversamplingStart();
}
else
{
OversamplingState.enabled = FALSE;
}
break;
case Cmd_Get_Spectrum : /* */
protocol_SendFrame (Rep_Info_Spectrum, (u8 *)(FFTState.enabled+1),1);
break;
case Cmd_Get_Spectrum_Data : /* */
if(FFTState.process_ready==FALSE)
{
if(FFTState.enabled==FALSE)
{
FFTState.process_ready = TRUE;
FFTState.enabled = TRUE;
ReEntryProcess = FFT;
ReEntry.enabled = TRUE;
}
}
protocol_u16SendFrame (Rep_Info_Spectrum_Data, (u16 *)loud,128);
break;
case Cmd_Enable_Spectrum : /* */
SendTask->ReplyNew = FALSE;
CommTask->Command = Cmd_Idle; /* none */
if (CommTask->Data[0] == TaskSwitchOff)
{
TIM_Cmd(TIM2, DISABLE);
FFTState.enabled = FALSE;
}
else
{
FFT_Port = CommTask->Data[0];
FFTStart();
}
break;
default : /* not implemented */
protocol_SendError (Err_NotImplemented);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -