STM32的复用时钟的开启时间

stm32的afio时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~
什么是复用?
我们知道,stm32有很多外设,这些外设的外部引脚都是与gpio共用的。我们可以通过软件来配置引脚作为gpio引脚还是作为外设引脚。当引脚配置为外设引脚时就叫做复用。如串口默认复用的引脚为:
pa9、pa10引脚可配置为普通io,也可配置为串口引脚(pa9为tx,pa10为rx)。
例子:串口1为例
关于外设的配置可查阅:《stm32参考手册》关于通用和复用功能i/o(gpio和afio) 的章节,如串口引脚配置如下:
我们可能经常看到一些代码(基于stm32f103zet6)的串口配置如下:
看到这里开启了afio时钟,让我疑惑了一下,为什么spi相关的引脚也配置为复用但并没有开启apio时钟也能正常工作。所以afio时钟应该什么时候开呢?
我们回顾一下,我们为什么要开启时钟呢?因为我们要对芯片内部的硬件进行控制(读写其寄存器),要控制哪一部分,就要开启那一部分的时钟。
本例中,使能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的重映射:
我们可以配置pb6、pb7作为串口1的tx、rx引脚,具体配置代码如下:
这里得调用一个重映射配置函数gpio_pinremapconfig,可在这个函数在stm32f10x_gpio.c中,如下:
其中第一个参数为要重映射的外设,可在stm32f10x_gpio.h中查看:
其中重映射又分为部分重映射和完全重映射,区别就是要重映射全部的引脚还是部分引脚,这也是有规定的。比如定时器1:
我们从gpio_pinremapconfig函数的实现中可以看到我们需要操控afio_mapr寄存器,所以需要开启afio时钟。
综上,需要操控afio管理的寄存器才需开启afio时钟,否则不需要开启。

Git概述及知识详解
微软研发最新存储技术,水煮强磁后数据仍可读
华为畅享9S采用水滴屏设计内置麒麟710处理器支持512GB存储扩展
5G技术全面提升电网智能化水平
ADI宣布推出 Power by Linear™的LTM4662
STM32的复用时钟的开启时间
旷视以AI技术助力数字乡村快发展
在半导体行业中,晶圆厚度应该如何检测?
先进封装RDL-first工艺研究进展
关于单片机led显示及驱动方法介绍
索尼或3月开放PS5预购,新手柄也会公开
FP7195芯片双色转模拟调光应用:磁吸灯
MTVerse XR重磅上线,摩尔线程元计算版图稳步展开
中美在AI领域中 刮来一阵强风
特斯拉私有化终止的最直接原因是什么?
亚运进口食品实施RFID无缝检测
LED电子生日蜡烛的电路实现,led candle
dotData致力于为企业提供全周期数据科学自动化和运营
Linux常用检测性能的10个基本命令汇总
半导体行业2016上半年并购案盘点 抱团取暖?