资源简介
处理器: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.*/
}
- 上一篇:基于QT实现文本编译器
- 下一篇:ob
jectArx永久反应器加入到命名字典
相关资源
- STM32的TFTLCD显示程序,亲测能用
- STM32 TIM3 四通道PWM输出实验.rar
- CUBEMX生成STM32代码删除编译信息文件(
- RC522 STM32F103C8 库函数 可任意修改
- DDS好的代码
- STM32+W5500(远程更新程序的上位机)
- ROS-STM32-KEIL
- STM32编码器模式测试例程
- STM32驱动max6675测温的测试例程
- 基于STM32单片机的指纹识别模块的测试
- stm32f10x_conf.h
- AT89S52控制DDS9850产生可调频的正弦波
- 基于FPGA的dds信号发生器代码
- AD9使用的STM32F103ZET6原理图库与封装库
- STM32F429 USART使用DMA方式收发数据.rar
- DDS的FPGA实现
- 使用AD9834与STM32联调的函数信号发生器
- STM32编码器Demo
- STM32F407VGT6芯片管脚功能定义
- NRF24L01的STM32测试程序
- VHDL正弦波发生器程序
- 基于DDS和MSP430的信号发生器设计
- 基于STM32的USB程序开发笔记
- ADXL362例程
- GPRS模块SIM900的STM32开发板原理图
- LCD-T6963C(STM32)驱动
- Keil5下的STM32F103Cx例程超值,含PWM输出
- stm32串口2接收数据串口1打印
- VL53L0X_STM32例程
- 基于STM32F030的PCM5242 miniDSP驱动配置
评论
共有 条评论