⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 measure_main.c

📁 用 Hitex 工具软件开发 stm32 的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
      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 + -