资源简介
处理器: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永久反应器加入到命名字典
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- 数字频率合成dds正弦波基于FPGA的DDS产
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- ucosII源代码 2.9版本全 Micrium-uCOS-II-V
评论
共有 条评论