目录
一、STM32F103系列芯片的地址映射和寄存器映射原理和GPIO端口的初始化设置三步骤
二、以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红黄绿LED 灯搭建电路,轮流闪烁,间隔时长1秒。
一、STM32F103系列芯片的地址映射和寄存器映射原理和GPIO端口的初始化设置三步骤
1.STM32F103的存储器映射&寄存器映射
存储器映射
在STM32内部的每个内存块存放不同的功能,而每个内存块都有地址。每个内存块中又分为好几个内存块,每个内存块有不同的寄存器,一个地址存放4个字节,在STM32内存中,1个地址存放32位的寄存器,有的寄存器有可能用不到32位(地址之间都相差4,比如第一个地址为0x00,那第二个地址为0x04),只用其中的低16位,那高16位将被保。外设内存块中,GPIO的内存块,在这个内存块中又分为GPIOA内存块,GPIOB内存块等等,内存块中存放的就是一些寄存器,每4个地址存放一个32位的寄存器。偏移地址是基于每个最小内存块(就是像GPIOA,GPIOB之类的内存块)的首地址。每个最小内存块都有地址范围,且GPIO内存块的首地址就是GPIOA内存块的首地址。
寄存器映射
寄存器映射:给具有特殊功能的内存块的首地址取一个具有特殊意义名称的过程就叫做寄存器映射。
学过C语言的同学都知道指针,我们要想取地址中的值必须利用指针,比如GPIOA_OTYPER寄存器的偏移地址为0x04,且GPIOA内存块的首地址为0X4000 0000,那么我们就可以利用下面的方式来取寄存器中的值。
首先我们知道GPIOA_OTYPER寄存器的地址为(0x04+0x4000 0000),这样写还不够,因为编译器并不知道这是地址,所以我们利用指针将其转成地址(unsigned int *)(0x04+0x4000 0000),最后我们再利用指针*(unsigned int *)(0x04+0x4000 0000)就可以读写寄存器了。
#define GPIOA_OTYPER *(unsigned int *)(0x04+0x4000 0000)这就是寄存器映射。
2.GPIO端口的初始化设置三步骤
GPIO端口初始化时,需要下面的步骤:
-
使能GPIO时钟,RCC_APB2PeriphClockCmd。
-
设置GPIO参数:输出OR输入,工作模式,端口翻转速率;
-
调用初始化函数:GPIO_Init