下面的程序是让led0闪烁,串口输出微分方程结果,可是下载到板上一点反应都没有,哪里有错呢?
#include <stm32f10x_lib.h>
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "math.h"
#include "led.h"
int main(void)
{
double p=20;
double yout,A0=3.25,B=22,a=100,b=50,C=135,C1=C,C2=0.8*C,C3=0.25*C,C4=0.25*C, v0=6, e0=2.5,r1=0.56;
double x[6]={-0.0164, -0.2593, -0.0244,-0.0055, 0.2361,0.0470},xdot[6]={0,0,0,0,0,0};
double k1[6]={0,0,0,0,0,0},k2[6]={0,0,0,0,0,0},k3[6]={0,0,0,0,0,0},k4[6]={0,0,0,0,0,0},dt=0.001;
u8 i=0,j=0;
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
LED0=0;
while(1)
{
printf("ceshi");
for(i=0;i<4;i++)
{
xdot[0]=x[1];
xdot[1]=A0*a*2*e0/(1+exp(r1*(v0-(x[2]-x[4]))))-2*a*x[1]-a*a*x[0];
xdot[2]=x[3];
xdot[3]=A0*a*(p+C2*2*e0/(1+exp(r1*(v0-C1*x[0]))))-2*a*x[3]-a*a*x[2];
xdot[4]=x[5];
xdot[5]=B*b*C4*2*e0/(1+exp(r1*(v0-C3*x[0])))-2*b*x[5]-b*b*x[4];
if(i==0)
{
for(j=0;j<6;j++)
{
k1[j]=xdot[j];
x[j]=x[j]+xdot[j]*dt/2;
}
}
if(i==1)
{
for(j=0;j<6;j++)
{
k2[j]=xdot[j];
x[j]=x[j]+xdot[j]*dt/2;
}
}
if(i==2)
{
for(j=0;j<6;j++)
{
k3[j]=xdot[j];
x[j]=x[j]+xdot[j]*dt;
}
}
if(i==3)
{
for(j=0;j<6;j++)
{
k4[j]=xdot[j];
x[j]=x[j]+(k1[j]+k2[j]*2+k3[j]*2+k4[j])*dt/6;
}
}
yout=x[2]-x[4];
printf("you5=%f",yout);
LED0=!LED0;
delay_ms(1000);
}
}
}
|