关于STM32(GD32类似)复用时钟何时开启呢?

前言

学习过程中发现有的外设需要开启时钟复用,有的则不用,于是有颇多疑问,到底什么时候才需要开启时钟复用呢?

AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~

我们先搞明白什么是复用功能?

STM32(GD32)有很多外设,这些外设的外部引脚都是与GPIO共用的。我们可以通过软件来配置引脚作为GPIO引脚还是作为外设引脚。当引脚配置为外设引脚时就叫做复用。如默认串口复用的引脚为:

STM32
STM32 PA9,PA10可以用作外设USART1
GD32 PA9,PA10 可以复用作了USART0

 所以,默认状态,PA9,PA10就是普通的IO口,如果需要用作外设则需要进行专门配置,这个配置过程就叫做复用。    知道了IO口的复用,我们看段代码

STM32 USART初始化配置程序

 此段代码,第7行复用了时钟,那么这里一定要复用时钟吗?先说结果,其实注销这段话串口一样能正常使用。

本例中,使能GPIOA、USART1的时钟是因为我们要对GPIOA、USART1相关的寄存器进行操作。那么AFIO呢?其管理的寄存器有哪些呢?从参考手册关于通用和复用功能I/O(GPIO和AFIO)这一章节可以看到AFIO管理的寄存器如下:

由此,程序对USART1进行配置,并没有涉及到AFIO相关的寄存器,所以并不需要打开AFIO时钟!

所以这里的第7行代码可以删掉。当然不删也可以正常工作,但是会白白增加能耗、写无用代码(白白浪费程序存储器空间)而已!

何时开启AFIO时钟?

按照上面分析的,当然是要操作AFIO相关的寄存器的时候才开启AFIO时钟。此处依然以串口为例。我们看到AFIO管理的寄存器中有复用重映射和调试I/O配置寄存器(AFIO_MAPR) 这一寄存器,这个寄存器怎么用呢?

首先,我们要知道什么是重映射。

使用重映射功能可以把一些复用功能重新映射到其他引脚上,在某些时候可以方便板级硬件的布局设计。设置AFIO_MAPR寄存器实现引脚的重新映射。此时,复用功能不再映射到它们的原始分配上。 可以重映射到任意引脚吗?其实是有规定的,可查阅参考手册,如串口1的重映射:

STM32 串口1重映射

我们可以配置PB6、PB7作为串口1的TX、RX引脚,具体配置代码如下:

这里得调用一个重映射配置函数GPIO_PinRemapConfig,可在这个函数在stm32f10x_gpio.c中,如下:

其中第一个参数为要重映射的外设,可在stm32f10x_gpio.h中查看:

我们从GPIO_PinRemapConfig函数的实现中可以看到我们需要操控AFIO_MAPR寄存器,所以需要开启AFIO时钟。

GD32的复用和重映射IO配置寄存器在如下位置,

不完全截取

综上,过程中需要操控AFIO管理的寄存器(多数需要重映射)才需开启AFIO时钟,否则不需要开启。

本文借鉴部分网络内容,如有侵权请联系作者删除。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带鱼九号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值