图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看赤色框内,地址相差0x4。为什么会相差4?许多初学者问我这个问题,高手就请绕过吧。
计算机、单片机都是以字节为单位进行存储的。这儿的4便是4个字节的意思。上面罗列的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节便是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。
翻开你从前用过的reg51.h文件,看看一般51单片机的寄存器地址映射,总共不到100个寄存器,几下就写完了。可是ARM单片机内部的模块十分多,寄存器也十分多,寄存器地址映射文件假如像51那样写,也能够,可是还有一种更有利于程序阅览和书写的而办法,便是使用结构体,所以当你翻开ARM单片机的寄存器映射文件后(例如lpc11xx.h、stm32f10x_map.h),你会看到,他们的地址悉数选用结构体的方式,一个同类模块的一切寄存器被放在了同一个结构体内部。在今后写程序的时分,不论是书写仍是阅览,都有很大的效果。例如下面一条句子:
LPC_SYSCON-》PRESETCTRL=0x1;
从句子中就能够看出,这是在对SYSCON模块中的PRESETCRTL寄存器进行装备。