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

📄 measure_main.c

📁 用 Hitex 工具软件开发 stm32 的例子
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************************
 * Project:    Tasking-STM32-Stick
 * File:       meassure_main.c
 *
 * System:     Cortex ARMv7 32 Bit (STM32FRT)
 * Compiler:   Tasking Altuim VX Toolchain v2.01
 *
 * Date:       2007-08-20
 * Author:     Application@Hitex.de
 *
 * Rights:     Hitex Development Tools GmbH
 *             Greschbachstr. 12
 *             D-76229 Karlsruhe
 ********************************************************************
 * Description:
 *
 * This file is part of the Tasking Example chain
 * The code is based on usage of the STmicro library functions
 * This is a small implementation of different features
 * The application runs in ARM mode with high optimization level.
 *
 ********************************************************************
 * History:
 *
 *    Revision 1.0    2007/08/20      Gn
 *    Initial revision
 ********************************************************************
 * This is a preliminary version.
 *
 * WARRANTY:  HITEX warrants that the media on which the SOFTWARE is
 * furnished is free from defects in materials and workmanship under
 * normal use and service for a period of ninety (90) days. HITEX entire
 * liability and your exclusive remedy shall be the replacement of the
 * SOFTWARE if the media is defective. This Warranty is void if failure
 * of the media resulted from unauthorized modification, accident, abuse,
 * or misapplication.
 *
 * DISCLAIMER:  OTHER THAN THE ABOVE WARRANTY, THE SOFTWARE IS FURNISHED
 * "AS IS" WITHOUT WARRANTY OF ANY KIND. HITEX DISCLAIMS ALL OTHER WARRANTIES,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 *
 * NEITHER HITEX NOR ITS AFFILIATES SHALL BE LIABLE FOR ANY DAMAGES ARISING
 * OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, INCLUDING DAMAGES FOR
 * LOSS OF PROFITS, BUSINESS INTERRUPTION, OR ANY SPECIAL, INCIDENTAL, INDIRECT
 * OR CONSEQUENTIAL DAMAGES EVEN IF HITEX HAS BEEN ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGES.
 ********************************************************************/
#include "system.h"
#include "FFTfunc.h"
#include "measure_main.h"


TaskInfo VU1State;
TaskInfo AmbState;
TaskInfo ScanState;
TaskInfo OversamplingState;
TaskInfo FFTState;
TaskInfo CounterState;

short fr[N_SAMPLE], fi[N_SAMPLE], loud[N_SAMPLE/2];
u16 FFT_Index = 0;
u32 event_counter;
u32 frequency;
u16 freq_time;
u8 tim_set_null;
u8 FFT_Port;
u8 TriggerSource;

bool Counter_Gate;

void START_ADCs (void)
{
   /* ADC1 Configuration ------------------------------------------------------*/
   ADC_DeInit(ADC1);
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
   ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
   ADC_InitStructure.ADC_NbrOfChannel = 1;
   ADC_Init(ADC1, &ADC_InitStructure);


   /* ADC1 Regular Channel14 Configuration */
   ADC_RegularChannelConfig(ADC1, ADC_Channel_8,  1, ADC_SampleTime_55Cycles5);
   /* Enable Vrefint channel17 */
   ADC_TempSensorVrefintCmd(ENABLE);
   /* Enable ADC1 */
   ADC_Cmd(ADC1, ENABLE);
}

void AmbStop(void)
{
   /* Configure PB.00 (ADC Channel8) as input */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
   /* reset PB1 for voltage source usage */
   GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
   AmbState.enabled = FALSE;
}
void VU1Stop(void)
{
   /* Configure PC.00 (ADC Channel10) as input */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   VU1State.enabled = FALSE;
}
/*-----------------------------------------------------------------------------------*/
void VU1Start(void)
{
   /* Configure PC.00 (ADC Channel10) as analog input */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOC, &GPIO_InitStructure);

   START_ADCs ();

   FFT_Index = 0;
   /* Start ADC1 Software Conversion */
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);

   VU1State.enabled = TRUE;
}

void AmbStart(void)
{
   /* Configure PB.00 (ADC Channel8) as analog input */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
   /* reset PB1 for voltage source usage */
   GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);

   START_ADCs ();

   FFT_Index = 0;
   /* Start ADC1 Software Conversion */
   ADC_SoftwareStartConvCmd(ADC1, ENABLE);
   AmbState.enabled = TRUE;
}

void ScanStart(void)
{
   EXTI_DeInit();

   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0);

   EXTI_ClearITPendingBit(EXTI_Line0);
   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);


   /*Init Timer*/
   TIM_DeInit(TIM2);
   TIM_InternalClockConfig(TIM2);

   TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
   TIM_TimeBaseStructure.TIM_Prescaler = 6400;       /*Sample rate 1ms*/
   TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


   TIM_SetCounter(TIM2,0);

   frequency =0;
   tim_set_null = 1;
   TIM_Cmd(TIM2, ENABLE);
   EXTI_Init(&EXTI_InitStructure);

   ScanState.enabled = TRUE;
}
void ScanStop(void)
{
   EXTI_DeInit();

   TIM_DeInit(TIM2);

   ScanState.enabled = FALSE;
}
void CounterStart(void)
{
   EXTI_DeInit();

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
   GPIO_Init(GPIOC, &GPIO_InitStructure);
   
   GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0);

   EXTI_ClearITPendingBit(EXTI_Line0);
   EXTI_InitStructure.EXTI_Line = EXTI_Line0;
   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
   EXTI_Init(&EXTI_InitStructure);

   event_counter = 0;
   CounterState.enabled = TRUE;
   Counter_Gate = FALSE;
}
void CounterStop(void)
{
   EXTI_DeInit();
   CounterState.enabled = FALSE;
}
void OversamplingStart(void)
{

   OversamplingState.enabled = TRUE;
}
/*-----------------------------------------------------------------------------------*/
void FFT (void)
{
   int i=0;
   if (FFTState.enabled)
   {
      if (FFTState.process_ready == FALSE)
      {
         wave(fi,0,0,0);               // set fi to 0
         if(FFT_Port == 3)
         {
            Norming (fr, 1, 1);        // correct to the analog world
         }
         else
         {
            Norming (fr, 3, 2);        // correct to the analog world
         }
         window(fr);
         fft(fr, fi);
         loudness(loud, fr, fi);
         FFTState.process_ready = FALSE;
         FFTState.enabled = FALSE;
         ReEntryProcess = Dummy;
         ReEntry.enabled = FALSE;
      }
      else
      {
         /* data are on the line */
//         if (SendTask->Process == 0)
         {
            FFTState.enabled = TRUE;
            /* TIM1 counter disable */
            TIM_Cmd(TIM2, ENABLE);

            while (FFT_Index < N_SAMPLE);
            FFT_Index = 0;

            /* TIM1 counter disable */
            TIM_Cmd(TIM2, DISABLE);
            FFTState.process_ready = FALSE;
         }
      }
   }
}

void FFTStart(void)
{
   /* Configure TIM1_CH1 (PA8) as alternate function push-pull */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   /* TIM1 configuration ------------------------------------------------------*/
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
   TIM_DeInit(TIM2);
   TIM_TimeBaseStructure.TIM_Period = 400; //0x100 low
   if(FFT_Port == 3)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -