STM32 学习记录四:存储器寄存器映射

STM32 学习记录四:存储器寄存器映射

文章日志
1.写于2022/08/25
文章目录

1.存储器映射

2.寄存器映射

迷茫了,不知道该写些什么了。因为我这段时间没有啥工作任务,所以就摸摸鱼,写写博客算了。

也不知道该写些什么,就随便写写了。

讲(抄)一下存储器和寄存器呗。

1.存储器映射

存储器,我们都知道,手机上的有RAM,ROM。

怎么区分呢?RAM,Random Access Memory,随机存取存储器。所以RAM是非常快的存储器,可以理解为闪存,内存。

ROM,O是only的意思,只读。全称 read only memory。相比于RAM,是很慢的,手机上就是存储容量,如64G,128G,256G,这种。

今天我们讲单片机 存储器映射,这个存储器是RAM。

存储器本身不具有地址信息,它的地址是由芯片厂商或
用户分配,给存储器分配地址的过程称为存储器映射,如果
再分配一个地址就叫重映射(具体地址分配参考芯片数据手
册及中文参考手册)

STM32 学习记录四:存储器寄存器映射_第1张图片

这里,我们看到,存储器分为了8个块。

给存储器上的某位分配一个地址,如0xFFFF FFFF

相邻地址之间(如0xFFFF FFFF 和0xFFFF FFFE),有32位(因为是32位单片机嘛)

那么,这8个块,具体有哪些作用呢?如下

STM32 学习记录四:存储器寄存器映射_第2张图片

2.寄存器映射

什么是寄存器及寄存器映射呢?

通过给有特定功能的内存单元起一个别名,这个别名就是
我们所说的寄存器。给已经分配好地址的有特定功能的内存
单元起别名的过程就叫寄存器映射

那个别名,叫寄存器。起别名的过程,叫寄存器映射。

如何访问STM32寄存器内容?

我们知道寄存器就是一些有特定功能的内存单元,所以要
访问STM32寄存器也就是操作STM32的内存单元,根据C语言
指针的特点,可以使用指针来操作STM32的内存单元。
假如我们要让STM32的GPIOC的第0管脚输出低电平,我
们怎么使用C语言来处理?
首先我们要知道GPIOC挂接在哪个总线上,需要知道其地
址,STM32总线地址如下:

STM32 学习记录四:存储器寄存器映射_第3张图片

所以使用C语言宏可以定义外设基地址:
#define PERIPH_BASE ((unsigned int)0x40000000)
然后分别定义APB2总线基地址:
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)

然后还需要知道端口外设地址,
同样使用C语言宏定义其端口地址:
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)

有了外设端口地址后,还需要知道GPIOC端口的寄存器地址,
如下表格:
STM32 学习记录四:存储器寄存器映射_第4张图片

同样使用C语言宏定义其端口寄存器地址:
#define GPIOC_CRL (unsigned int)(GPIOC_BASE+0x00)
#define GPIOC_CRH (unsigned int)(GPIOC_BASE+0x04)
#define GPIOC_IDR (unsigned int)(GPIOC_BASE+0x08)
#define GPIOC_ODR (unsigned int)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR (unsigned int)(GPIOC_BASE+0x10)
#define GPIOC_BRR (unsigned int)(GPIOC_BASE+0x14)
#define GPIOC_LCKR (unsigned int)(GPIOC_BASE+0x18)

这些寄存器具体的功能可以参考STM32F1中文参考手册。

STM32 学习记录四:存储器寄存器映射_第5张图片

控制 GPIOC 引脚 0 输出低电平(即通过BSRR 寄存器的 BR0
置 1)
GPIOC_BSRR = (0x01<<(16+0));
控制 GPIOC 引脚 0 输出高电平(即通过BSRR 寄存器的 BS0
置 1)
GPIOC_BSRR = 0x01<<0;

读取GPIOC端口所有引脚的电平(读 IDR 寄存器)
unsigned int temp;
temp = GPIOC_IDR;

ps:原封不动的照抄真的好无趣

但是知识点,就是死的,换个讲法,还是这个样子…

你可能感兴趣的:(stm32,单片机,学习)