C语言封装GPIO为库45课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

嵌入式系统应用C语言封装GPIO为库什么是库?库是架设在寄存器与用户驱动层之间的代码,是一系列函数的集合,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。如右图,用户代码调用库中的函数,库函数进行运算、使用宏或者控制寄存器的函数来配置寄存器。为什么要使用库?在简单的8位单片机程序开发中,一般通过直接配置芯片的寄存器,控制芯片的工作方式,如GPIO、中断、定时器等。配置的时候,常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置1还是置0。这些都是很琐碎的、机械的工作,因为8位机的软件相对来说较简单,而且资源很有限,所以可以直接配置寄存器的方式来开发。但对于STM32,因为外设资源丰富,带来的必然是寄存器的数量和复杂度的增加,这时如果仍采用直接配置寄存器方式来开发程序,就会有以下缺陷:(1)开发速度慢(2)程序可读性差(3)维护复杂这些缺陷直接影响了开发效率,程序维护成本,交流成本。为什么要使用库?库是在项目开始前,就已经写好的通用代码,可以在任意项目中使用,适用性与移植性较强;用户调用库函数可以方便的配置寄存器,省去了封装寄存器等底层开发环节;库中的函数名,宏名等命名规范,做到了见名知义。所以采用库函数开发程序,相对于直接配置寄存器开发方式,开发周期较快,程序可读性强,维护起来更方便。为了让同学们对函数库能知其然也知其所以然,理解函数库的来龙去脉,本节将在之前开发的程序基础上,讲解GPIO函数库的开发方法。构建库-GPIO外设基地址和寄存器结构体在“3.4寄存器”章节中,已经在“stm32f10x.h”文件中定义好了GPIO的外设基地址和GPIO寄存器的结构体。构建库-时钟定义GPIO要想正常工作,需要使能APB2时钟。在“stm32f10x.h”文件中补充上APB2ENR寄存器的地址。使用(uint32_t*)把(RCC_BASE+0x18)数值强制转换成了地址,然后再用“*”号做取指针操作,就能对该地址的内容赋值,从而实现了写寄存器的功能。

构建库-外设声明我们再把具体某个外设的基地址强制类型转换成相应的外设寄存器的结构体指针,然后再把该指针用宏定义成外设名,这样一来,外设名就指向该外设寄存器的结构体首地址,那么通过该外设名就可以直接操作该外设的全部寄存器。

构建库-外设声明我们再把具体某个外设的基地址强制类型转换成相应的外设寄存器的结构体指针,然后再把该指针用宏定义成外设名,这样一来,外设名就指向该外设寄存器的结构体首地址,那么通过该外设名就可以直接操作该外设的全部寄存器。

构建库-新建GPIO文件接下来使用函数来封装GPIO的基本操作,方便以后应用的时候不需要再查询寄存器,而是直接通过调用这里定义的函数来实现。我们把针对GPIO外设操作的函数存放在“stm32f10x_gpio.c”中,把其宏定义和函数声明存放在“stm32f10x_gpio.h”文件中。

构建库-定义GPIO引脚使用宏定义来定义GPIO引脚号。每个GPIO端口有16个引脚,当某个引脚被选中时,该引脚对应位为1,其余所有位为0,这样生成的16位操作数,作为该引脚的操作数。Pin15Pin14Pin13Pin12Pin11Pin10Pin9Pin8Pin7Pin6Pin5Pin4Pin3Pin2Pin1Pin00000000010000000例如7号引脚被选中,则:7号引脚的操作数是0000000010000000即16进制的0x0080构建库-定义GPIO引脚使用宏定义来定义GPIO引脚号。每个GPIO端口有16个引脚,当某个引脚被选中时,该引脚对应位为1,其余所有位为0,这样生成的16位二进制数,作为该引脚的操作数。Pin15Pin14Pin13Pin12Pin11Pin10Pin9Pin8Pin7Pin6Pin5Pin4Pin3Pin2Pin1Pin00000000010000000例如7号引脚被选中,则:7号引脚的操作数是0000000010000000即16进制的0x0080构建库-定义GPIO引脚构建库-定义GPIO引脚构建库-GPIOx_ODR构建库-GPIOx_BSRR构建库-GPIOx_BRR构建库-构建置位/复位操作函数

文档评论(0)

方世玉 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6101050130000123

1亿VIP精品文档

相关文档