OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4697|回复: 1

大家看看这个程序,为什么运行到中间就不运行了????

[复制链接]

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2014-3-9
在线时间
0 小时
发表于 2014-4-8 10:40:10 | 显示全部楼层 |阅读模式
我这是在ADC实验基础上做的程序,编译没错,但是运行到 LCD_ShowString(60,130,"ADC_CH0_VAL1:"); 这句就不运行了,因为最后屏幕上显示的是 ADC_CH0_VAL1 :(像ADC_CH0_VAL11, ADC_CH0_VAL2等是为了验证运行的位置).

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "wdg.h"
#include "timer.h"
#include "pwm.h"
#include "lcd.h"
#include "adc.h"

#include "math.h"
#include "stdio.h" 

//ALIENTEK Mini STM32开发板范例代码13
//ADC 实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
 

 
struct compx 
{ double real;
  double imag;
} compx ;

struct compx EE(struct compx b1,struct compx b2)
{
struct compx b3;
b3.real=b1.real*b2.real-b1.imag*b2.imag;
b3.imag=b1.real*b2.imag+b1.imag*b2.real;
return(b3);
}
void FFT(struct compx *xin,int N)
{
int f,m,LH,nm,i,k,j,L;
double p , ps ;
int le,B,ip;
float pi;
struct compx w,t;
LH=N/2;
f=N;
for(m=1;(f=f/2)!=1;m++){;}
nm=N-2;    
j=N/2;

for(i=1;i<=nm;i++)
{
if(i<j){t=xin[j];xin[j]=xin;xin=t;}
k=LH;
while(j>=k){j=j-k;k=k/2;}
j=j+k;
}
{
for(L=1;L<=m;L++)
{  
le=pow(2,L);
B=le/2; 
pi=3.14159;
 for(j=0;j<=B-1;j++)
  {
   p=pow(2,m-L)*j;
   ps=2*pi/N*p;
   w.real=cos(ps);
   w.imag=-sin(ps);
   for(i=j;i<=N-1;i=i+le)
     { 
      ip=i+B;
      t=EE(xin[ip],w);
      xin[ip].real=xin.real-t.real;
      xin[ip].imag=xin.imag-t.imag;
      xin.real=xin.real+t.real;
      xin.imag=xin.imag+t.imag;
     }
  }
}
}   
return ;
}

float  result[200];
struct  compx s[200];
const int   Num=100;
const float pi=3.14159;
long int f=5000,fs=50,fv;
int t;
float max,module;
float door=0.01,module_test[200],mid_m;
int kav,fv_test[200],mid_f;



 


 int main(void)
 {
    int i;
 
u16 adcx;
float temp;
SystemInit(); //系统时钟初始化为72M  SYSCLK_FREQ_72MHz
delay_init(72);     //延时初始化
NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  uart_init(9600); //串口初始化为9600
  LED_Init(); //LED端口初始化
  KEY_Init(); //初始化与按键连接的硬件接口
LCD_Init();
Adc_Init();
POINT_COLOR=RED;//设置字体为红色 
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"ADC TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2010/12/30");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,"ADC_CH0_VAL:");      
LCD_ShowString(60,150,"ADC_CH0_VOL:0.000V");      
for(i=0;i<100;i++)
{
adcx=Get_Adc(ADC_Channel_0);
     LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值   
temp=(double)adcx*(3.3/4096);
adcx=temp;
LCD_ShowNum(156,150,adcx,1,16);//显示电压值   
//temp-=adcx;
// temp*=1000;
 // LCD_ShowNum(172,150,temp,3,16);   
LED0=!LED0;
delay_us(200);

      
  s.real=adcx;
  s.imag=0;  


}
LCD_ShowString(60,130,"ADC_CH0_VAL1:");


运行到这里就不运行了。




FFT(s,Num);

  LCD_ShowString(60,130,"ADC_CH0_VAL11:");
for(i=0;i<Num;i++)
{
//printf("%.4f",s.real);
//printf("+(%.4f)j\n",s.imag);
result=sqrt(pow(s.real,2)+pow(s.imag,2));
}

  LCD_ShowString(60,130,"ADC_CH0_VAL2:");
max=result[0];
for(i=1;i<Num;i++)
  {
    if(max<result)
{
  max=result;
  t=i;
         }
  }

  LCD_ShowString(60,130,"ADC_CH0_VAL3:");
module=max/(Num/2);
//printf("module=%f",module);

fv=f*t/Num;
//printf("fv=%d",fv);
LCD_ShowString(60,130,"ADC_CH0_VAL4:");
LCD_ShowNum(156,130,fv,4,16);
//LCD_ShowNum(156,150,module,1,16);
LCD_ShowString(60,130,"ADC_CH0_VAL5:");
 }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-8 11:47:16 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 05:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表