紧急求救,keil编译时出错Error: L6218E

2019-03-25 20:32发布

求救于各路大侠,本人编了一个驱动 P2_7 LED的小程序,结果出现错误Error: L6218E:,源代码如下: c函数和头文件都是基于 ration的汉化说明版本。   #include "nxplpc11xx.h" #define CS_H              GPIO1->DATA |=(1<<2)
#define CS_L              GPIO1->DATA &=~(1<<2)
#define RES_H             GPIO1->DATA |=(1<<1)
#define RES_L             GPIO1->DATA &=~(1<<1)
#define SCL_H             GPIO0->DATA |=(1<<11)
#define SCL_L             GPIO0->DATA &=~(1<<11)
#define AO_H              GPIO1->DATA |=(1<<0)
#define AO_L              GPIO1->DATA &=~(1<<0)
#define SI_H              GPIO2->DATA |=(1<<11)
#define SI_L              GPIO2->DATA &=~(1<<11)
#define LED_H             GPIO2->DATA |=(1<<7)
#define LED_L             GPIO2->DATA &=~(1<<7)
/***********************************************/
/*  函数功能:配置系统时钟                     */
/*  说明:    选择外部12M晶振作为系统时钟,并通*/
/*            过倍频器(PLL)把时钟倍频4倍     */
/*  注意:    使用其它值晶振时修改倍频值,最后 */
/*            时钟要满足<=50MHz                */
/***********************************************/
void SysCLK_config(void)
{
 uint8 i;
 /*执行以下代码选择外部12M晶振作为时钟源*/
 SYSCON->PDRUNCFG     &= ~(1 << 5);          //系统振荡器上电,外部晶振使能  
   SYSCON->SYSOSCCTRL    = 0x00000000;   //振荡器未被旁路,1~20Mhz频率输入
   for (i = 0; i < 200; i++) __nop();      //等待振荡器稳定
  SYSCON->SYSPLLCLKSEL  = 0x00000001;         //PLL时钟源选择“系统振荡器”
   SYSCON->SYSPLLCLKUEN  = 0x01;               //更新PLL选择时钟源
   SYSCON->SYSPLLCLKUEN  = 0x00;               //先写0,再写1达到更新时钟源的目的(数据手册规定)
   SYSCON->SYSPLLCLKUEN  = 0x01;
   while (!(SYSCON->SYSPLLCLKUEN & 0x01));     //确定时钟源更新后向下执行
 /*执行以下代码倍频为48MHz*/
 SYSCON->SYSPLLCTRL    = 0x00000023;      //设置M=4;P=2; FCLKOUT=12*4=48Mhz
   SYSCON->PDRUNCFG     &= ~(1 << 7);          //PLL上电
   while (!(SYSCON->SYSPLLSTAT & 0x01));     //确定PLL锁定以后向下执行
 /*主时钟源选择倍频以后的时钟*/
 SYSCON->MAINCLKSEL    = 0x00000003;   //主时钟源选择PLL后的时钟
 SYSCON->MAINCLKUEN    = 0x01;    //更新主时钟源
 SYSCON->MAINCLKUEN    = 0x00;    //先写0,再写1达到更新时钟源的目的(数据手册规定)
 SYSCON->MAINCLKUEN    = 0x01;
 while (!(SYSCON->MAINCLKUEN & 0x01));     //确定主时钟锁定以后向下执行
 SYSCON->SYSAHBCLKDIV  = 0x01;    //AHB时钟分频值为1,使AHB时钟设置为48Mhz
}   /***********************************************/
/*  函数功能:使能CLKOUT脚输出频率             */
/*  入口参数:CLKOUT_DIV,即CLKOUT分频值,1~255 */
/*  说明:    此函数可用来测试时钟真实性       */
/***********************************************/
void CLKOUT_EN(uint8 CLKOUT_DIV)
{
 IOCON->PIO0_1=0XD1;
 SYSCON->CLKOUTDIV   = CLKOUT_DIV;   //CLKOUT时钟值为48/CLKOUT_DIV
 SYSCON->CLKOUTCLKSEL= 0X00000003;     //CLKOUT时钟源选择为主时钟
 SYSCON->CLKOUTUEN   =0X01;
 SYSCON->CLKOUTUEN   =0X00;
 SYSCON->CLKOUTUEN   =0X01;
 while (!(SYSCON->CLKOUTUEN & 0x01));        //确定时钟源更新后向下执行
} /**********************************************/
/*  函数功能:SysTick延时                     */
/*  入口参数:毫秒值或微秒值                  */
/*  说明:    利用系统定时器实现              */
/*            48Mhz时钟工作下                 */
/**********************************************/
static volatile uint32 TimeTick = 0;
   
void SysTick_Handler(void)       //系统定时器中断服务函数
{
 TimeTick++;
} void delay_ms(uint32 ms)
{
 SYSTICK->STRELOAD = (((48000)*ms)-1);   //往重载计数器里写值
 SYSTICK->STCURR   =  0;       //计数器清零
 SYSTICK->STCTRL  |=  ((1<<1)|(1<<0));     //开启计数器,开启计数器中断
 while(!TimeTick);
 TimeTick = 0;
 SYSTICK->STCTRL =0; 
} void delay_us(uint32 us)
{
 SYSTICK->STRELOAD = (((48)*us)-1);   //往重载计数器里写值
 SYSTICK->STCURR   =  0;       //计数器清零
 SYSTICK->STCTRL  |=  ((1<<1)|(1<<0));     //开启计数器,开启计数器中断
 while(!TimeTick);
 TimeTick = 0;
 SYSTICK->STCTRL =0; 
}  ///////以下为1ms延时调用函数///////////////////  void Delay_1ms (uint16 n)
{
        uint16 i,j;
        j=0;
        i = 0;
    for(j=0;j<n;j++)
                for(i = 110;i > 0;i--);
       
} /////////////以下为10us延时调用函数////////////// void Delay_10us (uint16 n)
{
        uint16 i,j;
        j=0;
        i = 0;
    for(j=0;j<n;j++)
                for(i = 1;i > 0;i--);
       
} //////////以下为单片机GPIO初始化函数/////////////////////// void GPIOInit( void )
{
    SYSCON->SYSAHBCLKCTRL |= (1 << 6);                              /* 使能GPIO时钟          */
 SYSCON->SYSAHBCLKCTRL |= (1 <<16 );           //使能IOCON时钟
    IOCON->PIO1_2 &= ~0xD1;                                         /* 将P2.0-11初始化为GPIO功能    */
    IOCON->PIO1_1 &= ~0xD1;
    IOCON->PIO0_11 &= ~0xD1;
    IOCON->PIO1_0 &= ~0xD1;
    IOCON->PIO2_11 &= ~0x07;
    IOCON->PIO2_7 &= ~0x07;     GPIO1->DIR    |= (1 << 0);
 GPIO1->DIR    |= (1 << 1);
 GPIO1->DIR    |= (1 << 2);
 GPIO0->DIR    |= (1 << 11);
 GPIO2->DIR    |= (1 << 11);
 GPIO2->DIR    |= (1 << 7);     ///////以上指令为设置相应GPIO为输出
} /////////////////////////////////////////////////////////////
void SysCLK_config(void);
void GPIOInit( void );
void Delay_1ms (uint16 n);
int main(void)
{  SysCLK_config();
GPIOInit(); while(1)
{
LED_H;
Delay_1ms(500);
LED_L;
Delay_1ms(500);
}
 
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
yishuiyuntian
1楼-- · 2019-03-26 02:20
_NXP LPC1000_ 错误内容是:LCD V 0.1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc11xx.o).
是用keil编译的
zhaojun_xf
2楼-- · 2019-03-26 07:50
 精彩回答 2  元偷偷看……

一周热门 更多>