12758|2

5

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

紧急求救,keil编译时出错Error: L6218E [复制链接]

求救于各路大侠,本人编了一个驱动 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);
}
 
}

lpc1114头文件详解.rar

7 KB, 下载次数: 13

此帖出自NXP MCU论坛

最新回复

SystemInit 没有定义,看看是不是没有包含这个函数是文件  详情 回复 发表于 2012-3-22 09:44
点赞 关注
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
错误内容是:LCD V 0.1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc11xx.o).
是用keil编译的
此帖出自NXP MCU论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
SystemInit 没有定义,看看是不是没有包含这个函数是文件
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表