历史上的今天

今天是:2026年01月04日(星期日)

正在发生

2023年01月04日 | STM32单片机中C语言操作寄存器的原理

发布者:SereneHarmony 来源: zhihu关键字:STM32  单片机  C语言  操作寄存器 手机看文章 扫描二维码
随时随地手机看文章

映射的概念

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,如下图所示的4GB空间(从block0-block7每个block512M)。在梳理STM32芯片的内部架构中提到的被控单元FLASH、RAM、FSMC和APB等功能部件共同排列在这4GB的地址空间内。在编程的时候,可以通过他们的地址找到他们,然后通过C语言对它们进行数据的读和写操作。



存储器映射

在这 4GB 的地址空间中,ARM 已经粗线条的平均分成了 8 个块,每块 512MB,每个块也都规定了用途,具体分类见如下表格。在这 8 个 Block 里面,有 3 个块非常重要,也是我们最关心的三个块。Block0 用来设计成内部FLASH,Block1 用来设计成内部 RAM,Block2 用来设计成片上的外设。其中,Block2 用于设计片内的外设,根据外设的总线速度不同,Block 被分成了AHB、APB1、APB2。

存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么?在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

通过C语言操作寄存器的例子

GPIOB端口的输出数据寄存器ODR的地址是0x40010C0C,ODR寄存器是32bit,低16bit有效,对应着16个外部IO,写0、1对应的IO则输出低、高电平。现在我们通过C语言指针的操作方式,让GPIOB的16个IO都输出高电平,见如下代码。


// GPIOB 端口全部输出 高电平

*(unsigned int*)(0x4001 0C0C) = 0xFFFF;

0x40010C0C在我们看来是GPIOB端口ODR的地址,但是在编译器看来,这只是一个普通的变量,是一个立即数,要想让编译器也认为是指针,我们得进行强制类型转换,把它转换成指针,即(unsigned int *)0x4001 0C0C,然后再对这个指针进行*操作。

通过绝对地址访问内存单元不好记忆且容易出错,可以通过寄存器的方式来操作,具体见如下代码。


// GPIOB 端口全部输出高电平

#define GPIOB_ODR (unsigned int *)(GPIOB_BASE+0x0C)

* GPIOB_ODR = 0xFF;


关键字:STM32  单片机  C语言  操作寄存器 引用地址:STM32单片机中C语言操作寄存器的原理

上一篇:stm32f103最小系统的组成及各部分功能
下一篇:详解STM32单片机的堆栈

推荐阅读

    近日,一款名为vivo X20 Plus UD的手机新品,通过了中国质量认证中心的3C认证。如果不出意外的话,该手机将于近期上市。  中国质量认证中心公布的信息显示,这款名为X20 Plus UD的新品刚在1月2日通过了3C认证。从型号不难看出,这应该是X20 Plus的全新版本,缩写字母UD可能是UpDate、Under Display或是Underwater Defense,即升级版、屏...
像任何的技术一样,当新硬件进入市场时,旧的技术要么被取而代之,要么接受改造。2018年的一些新技术,从许多方面改变了我们的生活。从家庭助手到帮助拯救环境,机器人将继续进化,承担起我们分配的任何任务。下面就来看看过去一年出现的一些新机器人,顺便展望一下未来。1.波士顿动力公司的Atlas人形机器人表演跑酷自2013年推出以来,波士顿动力公司(Bost...
输配电网发展趋势可预测的时代过去了,因而在电网升级规划(资金支出)和停机维护(运营支出)方面产生了很大的压力。光伏和风电的大量增长再叠加上传统机组的关停、负荷形式改变(比如来自电动汽车的负荷)使发展趋势的可预测性更小。反过来,电网运营商就更难决定在哪里进行必要的电网升级(资金支出),以及需要哪些运营方面的变更以保证必要的停运点...
据外媒报道,以色列初创公司Crispify推出新系统,以监测车舱内的空气质量,识别包括新冠在内的病毒和细菌。(图片来源:geektime)该系统可以安装在车内,监测和控制车舱内的空气质量。作为系统的一部分,传感器可从车内和车外输送数据,监测微小颗粒、灰尘、细菌、病毒、气体、化学品、温度,以及基本所有可能伤害驾驶员或乘客的污染物。该系统结合硬件-...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved