STM32的复用时钟开启时间简介.docxVIP

  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文档。上传文档
查看更多
什么是复用? 我们知道,STM32有很多外设,这些外设的外部引脚都是与—GPI0共用的。我们 可以通过软件来配置引脚作为 GPIO引脚还是作为外设引脚。当引脚配置为外设 引脚时就叫做复用。如串口默认复用的引脚为: USART1 rX PA9 USART1 RX PAW PA9 PA10引脚可配置为普通10,也可配置为串口引脚(PA9为TX, PA10为RX 。 例子:以串口 1为例 如串口引脚配置如下: USART^IW ex 卩10配? USARTm_TX 辛心棋A 用输弗 1 USART_RX 仝唄11悔犹 再空输入或供上拉ttA 半yL同歩桃兀 最近看到一份代码(基于 STM32F103ZET6的串口配置如下: void USARri_GPIQ_Corf ig[ voitl) 45 4 5 o 1 g 9 10 11 12 13 14 15 1? IS RCC_APB2PeriphClockGfnd( RCC_APB2Periph_GPI0A, ENIABLE); RCcZAPB2PeciphClPckQndfRCC APB2Pei:iDh USARTl.ENABLE): RCC-APB2Pe「iph匚IcKkLmdtRCJAPB2Pervph_AFIO,ENABLE); // 开启琦1匸炳钟| /*酉BScpto的覆式和i「. . ? TOC \o 1-5 \h \z GPI0_InttStructijre.GPI0_Ptn=GPI0_Ptn_9; . GPIO_I n ttStruc-ture. GPI D_Speed-GPI 0_ Speed j GPIO_InttStructure.GPIO_H(xJe-GPI0_Mode_AF_PP; GPIO_InLt(GPIOA,GPIO_InitStructure); GPIO_InttStructLire.G PIO_P tn=G PIO_P tn_iej - GPIO_ I nit Str uct t re* GPI O_H(xJe=GPI N_ FLOATIHG; GPI0」fl Lt (GPIOA,GPIO_InitSt ructure); 看到这里开启了 AFIO时钟,让我疑惑了一下,为什么 SPI相关的引脚也配置为 复用但并没有开启API0时钟也能正常工作。所以AFIO时钟应该什么时候开呢? 我们回顾一下,我们为什么要开启时钟呢?因为我们要对芯片内部的硬件进行控 制(读写其寄存器),要控制一部分,就要开启那一部分的时钟。 本例中,使能GPIOA USART的时钟是因为我们要对 GPIOA USART相关的寄存 器进行操作。那么AFIO呢?其管理的寄存器有哪些呢?从参考手册关于通用和 复用功能I/O(GPIO和AFIO)这一章节可以看到AFIO管理的寄存器如下: iI a-ll! i I a-ll ! 7 i Hl ! -1 0.4.1事件控制寄存器fAFIO_EVCKl S-4.2駆重腆射和调试UOSffi寄存器(AFIO.MAPR] B.4.3 朴部410SSS寄存器i(AF]O_EXTlCRl) 3,4.4外部中断斷番寄存^2(AF]O_EXnCR2) 3.4.5外剖中断哥S寄存器3(AF10_EXnCR3) B.4.丘百晤E巾撕戡吿寄稈曇4fAFlCi EXT1B4} 可以知道,本例对USART进行配置,并没有涉及到AFIO相关的寄存器,所以并 不需要打开AFIO时钟! 所以这里的第7行代码可以删掉。当然不删也可以正常工作,但是会白白增加能 耗、写无用代码(白白浪费程序存储器空间)而已! 何时开启AFI O时钟? 按照上面分析的,当然是要操作 AFIO相关的寄存器的时候才开启 AFIO时钟。 此处还是以串口为例。我们看到 AFIO管理的寄存器中有复用重映射和调试I/O 配置寄存器(AFIO_MAPR)这一寄存器,这个寄存器怎么用呢? 首先,我们要知道什么是重映射。 使用重映射功能可以把一些复用功能重新映射到其他引脚上,在某些时候可以 方便板级硬件的布局设计。设置 AFIO_MA P寄存器实现引脚的重新映射。 此时,复用功能不再映射到它们的原始分配上。可以重映射到任意引脚吗?其 实是有规定的,可查阅参考手册,如串口 1的重映射: ^47 USART1驹映像 S用功能 USART1_REMAP = 0 USART1_REMAP = 1 USART1 TX PAe PB6 USART1 RX PA10 PB7 我们可以配置PB6 PB7作为串口 1的TX、RX引脚,具体配置代码如下: void USART1_GPIO_Conf ig(void) { GPI0_1nitTypeOef GPI0_InItStructure; RCC_APB2PertphC

文档评论(0)

大宝&小宝 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档