• 大小: 946KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: 其他
  • 标签: stm32  ucos-ii  dds  fft  

资源简介

处理器:STM32 ,编译环境:keil MDK4.0及以上,3.5固件库。操作系统:uCOS-II.DDS方式输出2路波形(正弦,锯齿,方波),然后添加,STM32采样,FFT之后得出原波形的频率和幅值。

资源截图

代码片段和文件信息

/*
  ******************************************************************************
  * FILE:    uCOS-II的移植 
  * AUTHOR:  zouw96
  * VERSION: V1.1
  * DATE:    2012-10-23
  * BRIEF:   Main file.
  ******************************************************************************
  * ATTENTION:
  * 用UCos-II来写竞赛时的程序
  *  
  *
  *  COPYRIGHT 2011  All rights reserved.
  ******************************************************************************
*/

#include “ucos_ii.h“
#include “stm32f10x.h“
#include “User_config.h“


static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];
static OS_STK display_task[DISPLAY_TASK_STK_SIZE];
static OS_STK result_task[RESULT_TASK_STK_SIZE];


#define PI 3.14159
#define PI2 6.28318
//定义采样点数
#define NPT 1024
extern uint16_t TableFFT[];

u16 max;    //锯齿波和方波计算后的最大值
u16 min;    //锯齿波和方波计算后的最小值
u16 rate1;   //频率1步进
u16 rate2;   //频率2步进

   
u16 xy;  //触摸屏的X、Y
u16 real[1024];  //采样数组
static u16 i;  //循环用的变量静态变量作用域是该文件
u16 max1max2;  //频谱显示中的最大值
u16 f1=0f2=0;  //计算的频率值
u16 temp;

s32 lBUFIN[NPT];         /* Complex input vector */
s32 lBUFOUT[NPT];        /* Complex output vector */
s32 lBUFMAG[NPT];/* Magnitude vector */
s32 lBUFPHASE[NPT];
u8  FRE1[13]={0x33‘.‘0x330x330x310x300x300x300x350x300x300x300x30};//设置值 3.33  1000 50 000
u8  FRE2[13]={0x33‘.‘0x330x330x310x360x300x300x350x300x300x300x30};//设置值 3.33  1600 50 000
u8  WAVESELECT[3][4]={{‘S‘‘i‘‘n‘‘e‘}{‘S‘‘q‘‘u‘‘a‘}{‘S‘‘a‘‘w‘‘t‘}};
s8  waveselect1=0waveselect2=0;//波形种类的选择
u16 wave1[4096]wave2[4096];  //波形的数据
u16 F1F2;  //波形12的频率 
float A1A2;  //波形12的幅值
u16 P1P2;              //正弦波的相位
u8 D1D2; //锯齿波和方波的占空比
u8  setbit=23;   //设置值的位数
u8  setbit2=1;       
u8  setturn=5;   //判断是否按下设置键
u8  FRETMP[16];   //计算值

u8 xianshi=0;
u8 huaboxing = 0;
u16 first_value;
u16 second_value;
static u16  bo_xing = 1;

u16 bx_cy[320];
static void PowerMag(u16 nfill)
{
  s16 lXlY;
  for (i=0; i < nfill; i++)
  {
    lX= (lBUFOUT[i]<<16)>>16; /* sine_cosine --> cos */
    lY= (lBUFOUT[i] >> 16);   /* sine_cosine --> sin */
// lBUFMAG[i]=sqrt(lX*lX+lY*lY);    //全是正数的时候也可以简化
    {    
      float X=  nfill*((float)lX)/32768;
      float Y = nfill*((float)lY)/32768;
      float Mag = sqrt(X*X+ Y*Y)/nfill;
  if(i==0)
  lBUFMAG[i] = (uint32_t)(Mag*32768);
  else
      lBUFMAG[i] = (uint32_t)(Mag*65536);
    }    
  }
}

static void SystickInit(void)
{
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks);
SysTick_Config(rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC);

}

/*各应用任务的声明*/
static void  DisplayTask(void *p_arg);
static void  ResultTask(void *p_arg);

/*各事件的创建*/
OS_EVENT      *TpMbox;
OS_EVENT      *SamMbox;

static  void  MboxCreate(void)
{
SamMbox = OSMboxCreate((void*)0);
    TpMbox = OSMboxCreate((void*)0);              /* Create Sem for communication between Kbd and UserIF.*/
}



评论

共有 条评论