存储器与寄存器

1.什么是存储器映射

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射,如果再分配一个地址就叫重映射。

 

 

 

2、什么是寄存器及寄存器映射

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

3、如何访问STM32寄存器内容

         访问STM32寄存器也就是操作STM32的内存单元,根据C语言指针的特点,可以使用指针来操作STM32的内存单元。

假如我们要让STM32的GPIOC的第0管脚输出低电平,我们怎么使用C语言来处理?

         首先我们要知道GPIOC挂接在哪个总线上,需要知道其地址,STM32总线地址如下:

 

 

使用C语言宏

1)定义外设基地址:

periph周围的

#define PERIPH_BASE ((unsigned int)0x40000000)

(强制定义为32位无符号整型)

2)定义APB2总线基地址:

#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)

3)定义其端口地址:

#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)

有了外设端口地址后,还需要知道GPIOC端口的寄存器地址,如下表格:

 

4、定义其端口寄存器地址:

#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)

(主要在STM32中不认为是地址,而认为是立即数,所以强制类型为指针,转换成指针。为了操作指针·里的数据,就需要再加一个指针符号)
这些寄存器具体的功能可以参考STM32F1中文参考手册。

 

清除/置位寄存器      BRY/BSY   w写限权

 

控制 GPIOC 引脚 0 输出低电平(即通过BSRR 寄存器的 BR0 置 1)

GPIOC_BSRR = (0x01<<(16+0));    (左移16位)

 

控制 GPIOC 引脚 0 输出高电平(即通过BSRR 寄存器的 BS0 置 1)

GPIOC_BSRR = 0x01<<0;

 

读取GPIOC端口所有引脚的电平(读 IDR 寄存器)

unsigned int temp;

temp = GPIOC_IDR;      

(因为前面定义过了,所以不用写成temp = *(unsigned int *)GPIOC_IDR
 

 我们这里仅仅以GPIO这个外设为例,给大家讲解了如何使用C语言对寄存器封装的,对于其他的外设也是使用同样方法。其实到了后面的实验程序的编写时,我们都是使用ST公司提供的固件库,他把STM32所有外设都已经封装好了,我们这里分析这个封装过程只是想让大家更加清楚理解如何使用C来封装寄存器的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在单片机(Microcontroller)中,内部存储器寄存器的功能和特点与一般计算机中的存储器寄存器有一些区别。 1. 功能:在单片机中,内部存储器被用来存储程序代码和数据。它通常包括闪存(Flash)存储器随机访问存储器(RAM)。闪存存储器用于存储程序代码和常量数据,而RAM用于存储变量数据。寄存器则用于暂时存放指令、数据和计算结果等。 2. 容量和速度:单片机的内部存储器容量相对较小,通常以字节或千字节为单位。寄存器的容量更小,通常以位或字节为单位,并且数量有限。然而,由于内部存储器寄存器位于单片机内部,它们的访问速度非常快,可以在一个或几个时钟周期内完成读写操作。 3. 使用方式:内部存储器寄存器在单片机中都可以由程序员直接访问和操作。程序员可以通过地址来读取和写入内部存储器中的数据,以及使用寄存器来存储临时数据、控制信息和中间结果等。 4. 成本:由于内部存储器寄存器是单片机内部的组成部分,它们的成本通常已经包含在单片机芯片的成本中,无需额外购买。 总而言之,在单片机中,内部存储器用于存储程序代码和数据,而寄存器用于暂时存放指令、数据和计算结果等。内部存储器寄存器都可以由程序员直接访问和操作,具有较快的访问速度。然而,它们的容量相对较小,适用于资源受限的嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值