STM32单片机中C语言操作寄存器的原理

发布时间:2023-01-04  

映射的概念

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    【MCS-51】内部定时和计数器;51单片机是一款广泛应用于嵌入式系统开发的微处理器,内部集成了多个定时器和计数器模块,可以方便地进行时间相关的操作。本文将介绍51单片机内部定时和计数器的基本原理和......
    80C51单片机内部定时器和计数器的结构及原理解析;80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可......
    这一部分知识确实比较复杂。但是,如果你在之前对GPIO、串口通信、外部中断的学习中把这些外设掌握了的话,学习这个新知识并不难。 例本章共计1万余字,从STM32定时器的原理寄存器介绍、定时器配置以及定时器的......
    模式   TIM6-TIM7可以由向上计数。向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。   2.4 TIM6-TIM7基本定时器的寄存器......
    外部信号控制定时器且可实现多个定时器互连的同步电路(TIM10/TIM11,TIM13/TIM14没有)。 重复计数器,用于仅在给定数目的计数器周期后更新定时器寄存器(高级定时器特有)。 用于将定时器的......
    外部信号控制定时器且可实现多个定时器互连的同步电路(TIM10/TIM11,TIM13/TIM14没有)。 重复计数器,用于仅在给定数目的计数器周期后更新定时器寄存器(高级定时器特有)。 用于将定时器的输出信号置于复位状态或已知状态的断路输入(高级......
    中断或者软件查询等待时间结束。 定时与计数在本质是一致的,都是通过计数时钟信号的下降沿个数实现。 定时/计数器的方式寄存器和控制寄存器 1)工作方式寄存器TMOD TMOD用来设置定时/计数器的启动方式,选择的时钟源,设置......
    STM32看门狗定时器的工作原理和作用 看门狗定时器的特性;看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般来说都是向下计数的,给看......
    FX系列PLC的计数器C的功能、结构和计数过程;l 功能:对内部元件X、Y、M、S、T、C的信号进行计数。 l 结构:线圈、触点、设定值寄存器、当前值寄存器。 l 地址编号:字母C+(十进制)地址......
    它有两个功能,定时功能和计数功能,到底是使用定时功能还是使用计数功能,单片机内部所有资源的控制,都是通过对特殊功能寄存器的控制达到它的控制目的,要想使用定时计数器,必然要选择是定时功能还是计数功能,这个由特殊功能寄存器......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>