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