一直很不愿意写这种技术性的文章,部分原因是自己太菜了LPC17XX系统初始化文件,还够不上这个档次,但这对一些缺乏相关信息的人还是很有用的,或者说是为了自己的记忆更深些吧!
LPC17XX里还有一个系统初始化文件其中包括:3个头文件,2个C文件,1个.S文件。分别是:
LPC17xx.h、core_cm3.h、system_LPC17xx.h;
core_cm3.c、system_LPC17xx.c;startup_LPC17xx.s;
startup_LPC17xx.s是系统自动加载的ARM启动汇编代码。
LPC17XX.h是芯片的头文件,定义的是芯片寄存器的结构体,keil在头文件里关于寄存器的定义都是以结构体的方式定义的,所以我们在写程序的时候访问寄存器也要以寄存器方式访问,比如在GPIO的操作的时候由一个名“FIODIR”的方向寄存器,是一个32位的寄存器,对应一个IO口的32位,如果某位为1则对应的管脚为输出模式,因此在访问的时候写法如下:
LPC_GPIO1->FIODIR=0x000000ff;
GPIO1表示P1口,GPIO2表示P2口,上面这行代码表示P1口的低8位为输出模式。由于keil版本的原因可能有些版本定义结构体的时候没有LPC_这个部分使得访问GPIO1的写法如下:
GPIO1->FIODIR=0x000000ff;
关于这个的确认可以打开LPC17XX.h看一下就知道了。还有一点需要注意的是在keil的头文件里定义寄存器是以32位的方式定义的,所以不能使用手册中说明的字,半字的访问方式只能使用32位的访问方式
core_cm3.c、core_cm3.h分别是ARM M3外围驱动源代码和头文件,在使用的过程中不需要修改什么system_LPC17xx.h、system_LPC17xx.c这两个文件是与编程有非常密切关系的文件。从名字上就可以知道是关于系统的文件,这两个文件为我们提供了一个系统初始化函数,SystemInit();默认使用外部振,外部晶振是12MHz,使用PLL0倍频,LPC1700的系统初始化包括时钟配置、电源管理、功耗管理等。其中比较复杂的是时钟配置,由于有2个PLL,一个是主PLL0,可以为系统和USB提供时钟,一个是PLL1专门为USB提供48M钟,可以不使用。由于LPC1700的时钟灵活性较大,也使得配置时钟的过程稍微复杂一些。但是我们的系统文件都将这些做好了,
LPC17xx.h里有core_cm3.h和system_LPC17xx.h的调用,因此我改时钟频率或者其他参数只需要修改对应的宏定义即可