范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

寄存器与指针,以STM32为例说明什么是寄存器及如何使用指针

  我们平时所常用的STM32芯片主要由内核和片上外设组成,内核通过各种总线与外设连接,芯片最重要的作用有两个,一个是根据输入在一定条件下进行运算,而另一个重要的作用就是操作这些外设对外部硬件进行控制。
  而这些可以控制外部硬件的操作就分别存储在一个个内存空间中,这些内存空间可以形象的理解为一个个"小房子",
  内核想利用"房子"中的指令就要通过地址去访问,这个地址就如同我们生活中的门牌号,你要通过门牌号找对地方,才能找到要找的人。
  但是这个门牌号不是很好记忆,很容易搞错,位数越多的芯片越不方便,于是我们给这些地址重新起了别名,这就是我们常说的寄存器。
  STM32外设资源丰富,一个GPIO端口下有很多控制寄存器,比如配置输入输出模式与速度的GPIO_CRL和GPIO_CRH,控制输入输出数据的GPIO_IDR和GPIO_ODR,进行端口位设置清除的GPIO_BSRR和GPIO_BRR。
  寄存器可以用指针来操作,它将寄存器和指向的地址关联起来,然后对寄存器直接进行赋值操作就可以控制输入输出满足我们的开发需求。
  那指针是什么?我们先简要说明下。
  指针的应用最主要就是"*"号和"&"的符号,"&"的符号表示取地址,"&a"就表示变量a的存储地址;
  而"*"号要注意区分,定义时星号表示指针变量,所以定义时直接赋值需要取地址,而不是取具体值;
  而在计算时,星号表示取值,"*p"就表示p指向地址中的值,所以图中第二段代码最后计算出来b就与a的数值相等了。
  当内存空间较小,单片机资源有限时,比如8位51单片机,我们一般可以直接对寄存器进行赋值操作,
  这就相当于我直接把房子挑出来,然后将一个数值丢进去存起来,但当单片机资源庞大,寄存器众多,操作位数变为32位或者64位,这种方式就不合适了,
  一个是每次都要去查寄存器详细定义,效率低下还容易出错,再一个是程序可读性差后期维护困难,除了编写原作者其他人很难看懂。
  所以现在很多芯片厂商都推出了固件库,工程师在应用时也会根据公司产品的特点开发私有库,但无论形式如何这些都是为了减轻我们开发负担的手段。
  以STM32为例,ST公司将几乎所有常用寄存器进行封装,这样绝大部分应用场合我们就只需要关心功能的开发,而不必去知道底层硬件资源都是怎么被调用的。
  而这些寄存器操作函数封装中大量使用指针和结构体指针,比如单片机GPIO作输入输出时都要使用的IO口初始化函数GPIO_Init中就定义了结构体指针变量GPIO_InitStruct。 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
  GPIO_InitStruct有三个变量成员,分别是PIN脚定义、IO口通信速率、输入输出模式: typedef struct {   uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured. This parameter can be any value of @ref GPIO_pins_define */    GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins. This parameter can be a value of @ref GPIOSpeed_TypeDef */    GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins. This parameter can be a value of @ref GPIOMode_TypeDef */    }GPIO_InitTypeDef;
  而这些变量成员可以选择的值都在特定的头文件中用宏定义或枚举的方式,将大串数字替换成了清晰易懂的英文单词,这样在用户后续进行赋值操作的时候就不用去查芯片手册再敲上一长串数字了,直接使用替代名称,直观又不容易出错: #define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */ #define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */ #define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */ #define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */ #define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
  用户调用:(是不是很简单,不用去理会复杂的固件函数,对萌新极其友好)  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;				                         //配置端口号  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		         //推挽输出模式  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		         //IO口输出速率为50MHz
  说到这里,这篇文章也就结束了,可能有的同学会奇怪,为什么一定要用指针,直接赋值不是也能实现同样的效果?确实是这样的,但是直接赋值,一旦程序要进行改动或者部署到新的硬件上,就要把相关的参数全部修改一遍,因为直接赋值你的操作对象是房子中的东西(存储数据),而使用指针你的操作对象是房子(寄存器地址),什么样的东西是不确定的,而房子是有限且确定的,所以使用指针能极大提高程序的复用性和简洁程度,是让C语言变得华丽优美的关键所在。

胃不好盗汗的患者多吃这款鸭肉炖白萝卜白萝卜老鸭汤1原料老鸭白萝卜葱姜香菜盐。2将老鸭块冷水下锅,下入黄姜两片,葱结一条,进行焯水。3将焯好水的老鸭及姜片下锅,加入足够多清水,大火煮开,再中火炖3060分钟,时间由个人口感定。4最在造化小儿所累的日子里自古造化弄人,所以王子安感叹道君子见机,达人知命。孔子曰不知命,无以为君子也。我已过知天命的年纪,自然懂得谋事在人,成事在天的道理。所以每天过着身动心不动的日子,不去杞人忧天。然则科学家创业者北京术锐创始人徐凯单孔手术机器人蓄势待发在中国,手术机器人的市场渗透率仍然很低,主要应用于腔镜和骨科手术两大领域,前者可进行泌尿外科妇科胸外科及普外科手术,后者主要用于脊柱和关节手术。其中,腔镜手术机器人是手术机器人最大脂肪肝患者饮食原则6条建议每天都要做,肝脏才能轻松点肝脏被称为五脏之首,如果肝脏功能出现了问题,很有可能会牵扯到其他器官的健康状况,甚至也可能会增加患并发症的风险。可是现实生活中人们对于肝脏并不是特别的了解,比如易受到肾脏,人们会不上网课,家长做到这7点,孩子成绩不怕落下近期疫情反复,很多地方的孩子开始上网课。孩子学习效果如何?有的家长欣慰,也有家长担心。担心之余,我们也要反思孩子上网课,作为家长,我们是否已经积极行动起来,认真做好了准备?总结了几免费领神敢达ampampamp风云再起!敢达争锋对决大波机体上新凌冬已至,全国迎来新一轮降温潮,但正版敢达3D动作对战手游敢达争锋对决依旧热情不减,连续上新神敢达风云再起敢达亚斯克雷普欧斯等多款新机,玩家参与讨伐战活动,更可免费领取人马合一的神大雪已至,提醒上了岁数,尽量吃3宝饮2酒,别拿身体开玩笑大雪已至,意味着以后的天气也会越来越冷,在这个天寒地冻的季节,人们都喜欢猫冬,奉行的原则是能不出门就不出门,这样不仅暖和,也安全。而窝在家中的日子,大家最离不开的,就是吃喝!不过,外阴白斑,一个秘方,内外兼治今天我们说一下外阴白斑的问题,关于外阴白斑,不管是中医范围还是西医范围来看,都是一种疑难杂症,首先中医认为,外阴白斑的产生主要就是和肝脾有关,因为肝经环绕营部,主藏血,肾藏经,继而坐忘论说了什么?坐忘论是唐代著名道人司马承祯的著名文章,一向受到爱好养生的人们的重视。我对此文也做了初步的了解,现根据坐忘论的原文以及相关的文献资料,看看坐忘论都是说了什么事情,为什么能成为古代养长寿之道过了65岁的你,还有多少颗牙?每天刷几次牙?常有人说我都老掉牙了,年龄大了真的就一定要掉牙吗?当然不是,生活中八九十岁满口牙仍然缺失很少的人并不少见,这样的人大多身体状况良好,少有老年人常见的糖尿病高血压等基础疾病,即便有发詹姆斯克利夫兰的体育氛围很棒,球迷总是声势浩大今日,湖人102116客场不敌骑士。赛后,湖人前锋勒布朗詹姆斯接受了采访。当被问到他是否曾经作为对手体验过今日骑士主场的热烈氛围,詹姆斯说积极的层面?是的。不过,我也曾经来到这里,
英超狼队vs阿森纳世界杯前的最后一轮联赛,大概就像是小学生春游的前夜,很难说球场上的队员们心思是不是已经远在卡塔尔了,那么我们该如何判断每只俱乐部的战意呢?今晚狼队和阿森纳的这场比赛算得上是比较好的比2014年还强?阿根廷世界杯26人名单引热议,60夺冠投票率北京时间11月12日,阿根廷足协公布了卡塔尔世界杯26人大名单,这份名单一出来就引发热议,除了唯一一个瑕疵外,这支阿根廷队整体实力非常强非常均衡!在某网站给出的阿根廷世界杯前景投票阿德里亚诺否认自己遭枪击身亡,戏称现在是鬼魂和你们说话直播吧11月13日讯巴西前国脚阿德里亚诺被传遭枪击身亡,随后他亲自站出来否认这个假消息。近日巴西里约热内卢发生了枪击案,而网上随即有传闻称,阿德里亚诺也在枪击案中身亡。这让球迷们非学会这5道砂锅菜,冬天不用为吃啥犯愁了,酥烂营养,暖身暖胃本期导读学会这5道砂锅菜,冬天不用为吃啥犯愁了,酥烂营养,暖身暖胃冬季天冷吃什么好?吃砂锅菜是不错的选择。砂锅能均衡而持久地把外界热能传递给内部原料,相对平衡的环境温度,有利于水分早餐别再买着吃!分享3道早餐饼,简单不用早起,营养又好吃早餐别再买着吃!分享3道早餐饼,简单不早起,营养又好吃,快学学现在我们说一日三餐,一天要吃三顿饭,哪顿饭最重要?当然是早餐。俗话说早餐要吃好,早餐是一天的基础,可以唤醒身体,补充能天凉降温了,推荐4道家常汤做法,营养美味又解馋,更能暖身暖胃随着新一轮冷空气的到来,小雨又开始连绵起来,好在前两天供暖成功,屋内能保持在20度左右,刚看了天气预报,下个礼拜还有雨夹雪,刚进入冬天,还真有点不习惯,里外温差大,稍微一不注意就感腐乳是营养佳品还是致癌食物?看完涨知识了腐乳被称为下饭神器,绵密的口感,重口的调味,用来配白米饭很适合。但有的人不提倡吃豆腐乳,觉得经过发酵制作而成的东西会产生对人体健康不利的物质,吃太多会引发健康问题。究竟腐乳是营养佳营养专家评出优质蛋白质十佳食物,战胜了90的食材蛋白质是除脂肪碳水化合物以外人体最重要的三大能量营养素之一对保持良好的免疫力有着不可忽视的作用哪些食物能补充优质蛋白质呢?优质蛋白质食物TOP10高蛋白膳食顾名思义就是提高了蛋白质年纪大了,早餐更要吃好!推荐5道早餐,营养又好吃,常吃身体好导语年纪大了,早餐更要吃好!推荐5道早餐,营养又好吃,常吃身体好很多人上了年纪后,变得越来越节省,大多数时候早餐都只吃白粥和咸菜,虽然过日子要精打细算,但年纪大了,早餐更要吃好!不最好吃的4道下饭菜做法,鲜香美味,营养丰富,一个小时就搞定了无论在哪里吃饭,都没有在家里吃饭舒服,用餐环境也舒适,没有饭店的喧闹,外面的饭菜看似好吃,其实含有不少高科技,尤其是一些增鲜调味品,厨师恨不得多放一些,论干净卫生,健康安全来说,还冬季孩子的日常养护冬季如何养生?我们先看看老祖宗的智慧是如何说的。黄帝内经告诉我们春生夏长,秋收冬藏。冬三月,此谓闭藏,水冰地拆,无扰乎阳,早卧晚起必待日光,使志若伏若匿,若有私意,若已有得,去寒就