一 寄存器
1.1 地址映射和寄存器映射原理
地址映射:
为了使CPU执行指令能够准确无误的访问正确的存储单元,需将用户程序中的逻辑地址转换为由机器直接寻址的物理地址,这一过程称为地址映射
寄存器映射:
寄存器映射是在地址映射的基础上运行的。以STM32为例,在存储器片上外设区域,四字节为一个单元,每个单元对应不同的功能。我们可以通过控制这些单元时来完成相应的功能。我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元。但这些单元的地址繁琐冗长容易出错,因此就以功能为名给这个内存单元取一个代号,这个别代号实质上就是寄存器名字。综上,给已分配好地址的能完成相应功能的内存单元取代号的过程就叫寄存器映射。
1.2 寄存器
寄存器是CPU内部用来存放数据的一些小型存储区域,用来存放二进制数据或代码的信息
二 GPIO
2.1 GPIO端口的初始化设置
GPIO端口的初始化设置一共分为三个步骤:
1.打开GPIO口的时钟
GPIO地址:
时钟地址:
2.初始化GPIO口
3.设置低电平
三 流水灯的仿真与实现
3.1 GPIOx端口初始化
对GPIOA的A7、GPIOB的B9、GPIOC的C15设置:
#define GPIOA_CRL *((unsigned volatile int*)0x40010800)
#define GPIOB_CRH *((unsigned volatile int*)0x40010C04)
#define GPIOC_CRH *((unsigned volatile int*)0x40011004)
GPIOA_CRL&=0x0FFFFFFF; //设置位 清零
GPIOA_CRL|=0x20000000; //PA7推挽输出
GPIOB_CRH&=0xFFFFFF0F; //设置位 清零
GPIOB_CRH|=0x00000020; //PB9推挽输出
GPIOC_CRH&=0x0FFFFFFF; //设置位 清零
GPIOC_CRH|=0x30000000