历史上的今天
返回首页

历史上的今天

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

正在发生

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

2023-01-04 来源:zhihu

映射的概念

存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,如下图所示的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;


推荐阅读

史海拾趣

承兴(CX)公司的发展小趣事

经过多年的努力和发展,承兴公司已经成为一家具有全球影响力的电子企业。除了在中国市场保持领先地位外,承兴还积极拓展海外市场,并在美国、新加坡等地设立了分公司和研发中心。通过与全球合作伙伴的紧密合作和资源共享,承兴不断提升其全球竞争力,并努力实现国际化的发展目标。

请注意,由于承兴(CX)公司的具体发展历程和细节可能因时间和市场变化而有所不同,以上故事仅为虚构示例,旨在展示承兴公司在电子行业中的发展脉络和关键事件。

ddm hopt + schuler GmbH & Co KG公司的发展小趣事

为了保持技术领先地位和市场竞争力,ddm hopt + schuler公司积极开展跨界合作和创新发展。公司与多所知名高校和研究机构建立了产学研合作关系,共同研发新技术、新产品。此外,公司还积极参与国际交流与合作,引进国际先进技术和管理经验。这些合作不仅为公司带来了更多的创新资源,也提升了公司的国际影响力和竞争力。

DEVCON公司的发展小趣事

在竞争激烈的电子行业中,提供优质的服务是赢得客户信任的关键。DEVCON公司深知这一点,因此不断创新服务模式,提升服务质量。公司建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。同时,公司还积极开展培训活动,提升员工的技能水平和服务意识。这些创新举措赢得了客户的广泛赞誉和信赖,为DEVCON公司的稳定发展提供了有力保障。

圣邦微电子(Fangtek)公司的发展小趣事

在1950年代,电子工业正处于蓬勃发展的初期。阿尔·克瑞顿,一位富有创新精神的化学家,在美国马萨诸塞州丹佛斯市的一个实验室里,经过无数次的试验,终于研发出了一种名为Devcon可塑钢修补剂的新型材料。这种材料经济实惠、不易燃,且能够作为焊接的替代品,迅速在电子制造和维修领域引起了广泛关注。这就是DEVCON公司的起点,一个由创新精神和市场需求共同点燃的火花。

Dell公司的发展小趣事

面对日新月异的电子行业技术和市场变化,DEVCON公司始终保持敏锐的洞察力和创新精神。公司不断投入研发力量,探索新的技术和应用领域;同时积极寻求与国内外优秀企业的合作机会,共同推动电子行业的发展。正是这种持续的创新与发展精神,让DEVCON公司在激烈的市场竞争中始终保持领先地位,成为电子行业中不可或缺的重要力量。

以上五个故事是基于DEVCON公司可能的发展路径和一般电子行业的发展趋势而虚构的。这些故事旨在展示DEVCON公司如何通过技术创新、市场扩张、服务创新等方式在电子行业中不断发展和壮大。

GaN Systems公司的发展小趣事

为了更好地服务全球客户,GAIA盖亚电源积极实施全球化战略,在全球范围内设立了25个分支机构,形成了覆盖广泛的销售和技术支持网络。这些分支机构不仅负责当地市场的开拓和维护,还为客户提供了及时、专业的技术支持和售后服务。通过本地化管理,GAIA盖亚电源能够更加灵活地应对不同地区的市场需求,进一步提升客户满意度和品牌影响力。

问答坊 | AI 解惑

电子项目合作群QQ:86455552

电子项目合作群QQ:86455552 本人从事电子设计工作10年以上经验,有扎实的模拟及数字电路 专业知识。有一定EMC、ESD、安规知识;懂射频、开关电源的设 计;会C51、PIC、MSP430、ARM等系列单片机编程。有验钞机, 按摩椅,麻将机,工业仪表、工控 ...…

查看全部问答>

送MM礼品 可编程闪字风扇

还在为送MM的礼品而担心吗  ___花___已不再新兴了 呵呵 只要22元 就为送MM的礼品就搞定! 这是一款新潮的USB或放入3个7号电池双供电实用美观的闪字风扇,不需要电脑可以自由编写内容,彰显你的个性,风扇转动时,编辑的字符会转动,内容 ...…

查看全部问答>

手机模块资料大全。

常见手机模块资料:TC35,MC55,GTM900.…

查看全部问答>

PB 5.0的项目能在6.0中使用吗?

请问:以前定制的pb5.0的项目,能直接在PB6.0中使用吗? 如果需要修改,请问怎么才能做到!~~~…

查看全部问答>

(高手请进)如何修改代码段的代码的内容?

使用keil写单片机程序时,在程序运行阶段是不允许修改code段中的内容的,但是,我现在想实现动态加载模块的功能,需要在程序运行的时候修改code段的内容.    请问有什么办法在程序运行期间修改code段的内容?         ...…

查看全部问答>

请问Windows Embedded CE 6.0 为什么只有评估版?

我在网上到处找Windows Embedded CE 6.0的正式版,但是没有。全都是评估版。请问各位哪里有正式版下载?谢谢。…

查看全部问答>

工业交换机和市场上见到的交换机有什么不同?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata   工业交换机和市场上见到的交换机有什么不同, …

查看全部问答>

ulink-me升级到ulink2。

现在网上有种说法。ulink-me和ulink的软硬件是一样的。区别在:P1.25(28PIN)  ULINK-ME 接地, ulink2 接高 or float.在使用keil 3.15时,ulink-me 也会update,只是不成功。有哪为DX,试过。…

查看全部问答>

LPC1768上 跑MDK RTX

最近在玩这个RL-ARM。 成功init创建几个任务后,在一个任务里,我用 NVIC_EnableIRQ( )打开了一个外设中断。 在Debug时 跑到这个任务,打开中断时 就挂了。hang on在了 HardFault_Handler。 请问如何解决这个问题? 不是说RL与NVIC中断无限制吗 ...…

查看全部问答>