我是新接触stm32的,学了没多久就接了一个项目做(太阳位置跟踪系统,用5110显示方位角和高度角),可能对keil for ARM的编程环境还不是很了解,现在整个工程都写好了,但是就困于这一个错误。
sun_12864.axf: Error: L6218E: Undefined symbol ReadTimeFlag (referred from main.o).”
我是首先在51上写好的,编译没问题,也可以显示。可是改用stm32写就出现这个问题了。我试过在主函数上再次声明ReadTimeFlag这个标志位,反而出现更多错误。这是我的相关程序
彩色部分是说明错误的地方
/***************************************************************************
主函数部分
****************************************************************************/
#include <stm32f10x_lib.h>
#include <stdio.h>
#include "DS1302.h"
#include "key.h"
#include "AngleCalculate.h"
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "timer.h"
FP32 s;
FP32 k;
int main()
{
char temp1[16];
//
Ds1302_Init();
Ds1302_Read_Time(); //首次读取时间
if((time_buf1[2]+time_buf1[7])==0) //如果所有参数都为0,写入一个初始值
Ds1302_Write_Time();
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
while(1)
{
Readtime();
Timerx_Init(1000,7199);
s = (AziAngleCalculate( )/PI)*180;
k = (EleAngleCalculate( )/PI)*180;
if( ReadTimeFlag == 1 ) //定时读取ds1302 定时时间到 则标志位置1,处理过时间参数标志位清零
{
ReadTimeFlag = 0; //标志位清零
Ds1302_Read_Time();//读取时间参数
sprintf(temp1,"DATE %02d-%02d-%02d %d",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3],(int)time_buf1[7]);//年月日周
LCD_PutString(0,1,temp1);//显示第一行
sprintf(temp1,"%02d:%02d:%02d %02d°%02d",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6],(int)time_buf1[8],(int)time_buf1[9]);//时分秒
LCD_PutString(0,2,temp1);//显示第二行
sprintf(temp1,"Hi %f",k);
LCD_PutString(0,3,temp1);// 3
sprintf(temp1,"Az %f",s); //
LCD_PutString(0,4,temp1); // 4
}
}
}
/**********************************************************************************************
这是计算太阳方位角的函数中与错误有关的部分,即那个标志位ReadTimeFlag.而事实上我已经在这个.c文件的头文件里定义了,下面有显示
*********************************************************************************************/
#include <math.h>
#include"AngleCalculate.h"
#include"DS1302.h"
unsigned int Year,Month,Day,Hour,Min,Sec;
void Readtime(void)
{
if( ReadTimeFlag == 1 ) //大约100ms读一次时间,经纬度变化一次
{
ReadTimeFlag = 0;
Ds1302_Read_Time();
Year = time_buf1[1]; // 赋值年
Month = time_buf1[2]; // 赋值月
Day = time_buf1[3]; // 赋值日
Hour = time_buf1[4]; // 赋值时
Min = time_buf1[5]; // 赋值分
Sec = time_buf1[6]; // 赋值秒
}
}
/********************************************************************************
太阳高度角.c文件的头文件(只写了相关部分出来)
***************************************************************/
#ifndef __AngleCalculate_H__
#define __AngleCalculate_H__
#include <math.h>
typedef float FP32;
typedef double FP64;
#define PI 3.1415
extern unsigned char ReadTimeFlag;
|