0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的复用时钟的开启时间

汽车玩家 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2020-04-04 17:22 次阅读

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

什么是复用?

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

STM32的复用时钟的开启时间

PA9、PA10引脚可配置为普通IO,也可配置为串口引脚(PA9为TX,PA10为RX)。

例子:串口1为例

关于外设的配置可查阅:《STM32参考手册》关于通用和复用功能I/O(GPIO和AFIO) 的章节,如串口引脚配置如下:

STM32的复用时钟的开启时间

我们可能经常看到一些代码(基于STM32F103ZET6)的串口配置如下:

STM32的复用时钟的开启时间

看到这里开启了AFIO时钟,让我疑惑了一下,为什么SPI相关的引脚也配置为复用但并没有开启APIO时钟也能正常工作。所以AFIO时钟应该什么时候开呢?

我们回顾一下,我们为什么要开启时钟呢?因为我们要对芯片内部的硬件进行控制(读写其寄存器),要控制哪一部分,就要开启那一部分的时钟。

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

STM32的复用时钟的开启时间

可以知道,本例对USART1进行配置,并没有涉及到AFIO相关的寄存器,所以并不需要打开AFIO时钟!

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

何时开启AFIO时钟?

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

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

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

STM32的复用时钟的开启时间

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

STM32的复用时钟的开启时间

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

STM32的复用时钟的开启时间

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

STM32的复用时钟的开启时间

其中重映射又分为部分重映射和完全重映射,区别就是要重映射全部的引脚还是部分引脚,这也是有规定的。比如定时器1:

STM32的复用时钟的开启时间

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

综上,需要操控AFIO管理的寄存器才需开启AFIO时钟,否则不需要开启。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348744
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74511
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50570
收藏 人收藏

    评论

    相关推荐

    求助,为什么STM32要设置时钟开关?

    STM32在使用时离不开时钟,在做绝大部分操作之前,除了要先进行相应的配置之外,关键还要开启时钟,否则就什么事都做不了。既然如此,为什么设计
    发表于 04-23 06:05

    请问STM32f103使用PB14做外部中断为什么要开启复用时钟才能用?

    如题,我其他中断不开启用时钟也可以用,这是为啥?有大佬能解个惑吗?
    发表于 04-11 07:22

    有关stm32f103端口复用的几个问题求解

    在学习GPIO时,遇到到端口复用问题一直不能明白,我举个例子: PB6 PB7默认情况下是做普通IO使用的,当我想用I2C1是,我开启RCC_APB1PeriphClockCmd
    发表于 04-07 07:32

    STM32L051同时开启RTC时间戳和秒唤醒后,使用GPIO引脚无法触发时间戳中断如何解决?

    STM32L051同时开启RTC时间戳和秒唤醒后,使用GPIO引脚无法触发时间戳中断。但使用一个3.3V的电源接到PC13能够触发RTC时间
    发表于 04-01 06:37

    使用STM32H743-ADC设置PLL2为时钟源为什么开启不了?

    ,发现能采集到数据: 然后下载到同样为STM32H743IIT6的另外一个开发版时却发现采集到的数据为0。这是为什么呀? 这个开发板也类似最小核心开发板了,可是我却开启不了PLL2作为它的ADC时钟
    发表于 03-12 08:30

    无人机电池使用时间变短的原因

    电池使用时间变短了,这是很多无人机使用者都会遇到的问题,可电池使用时间变短的具体原因都有哪些?
    的头像 发表于 12-08 16:28 448次阅读

    【RA系列】用时钟频率精度测量电路进行时间校验

    【RA系列】用时钟频率精度测量电路进行时间校验
    的头像 发表于 11-25 08:06 246次阅读
    【RA系列】<b class='flag-5'>用时钟</b>频率精度测量电路进行<b class='flag-5'>时间</b>校验

    延迟电池使用时间的设计考虑

    电子发烧友网站提供《延迟电池使用时间的设计考虑.doc》资料免费下载
    发表于 11-14 09:57 1次下载
    延迟电池使<b class='flag-5'>用时间</b>的设计考虑

    STM32的SysTick时钟源来自哪里?

    STM32的SysTick时钟源来自哪里?
    的头像 发表于 10-26 15:58 964次阅读
    <b class='flag-5'>STM32</b>的SysTick<b class='flag-5'>时钟</b>源来自哪里?

    串口通信为何要打开复用时钟

    串口通信为何要打开复用时钟???小白不是很理解,求大佬解释​
    发表于 10-23 06:04

    STM32失能时钟和复位外设的区别

    STM32失能时钟和复位外设的区别
    的头像 发表于 10-17 11:48 555次阅读
    <b class='flag-5'>STM32</b>失能<b class='flag-5'>时钟</b>和复位外设的区别

    关于FPGA专用时钟管脚的应用

    本文主要用来随意记录一下最近在为手头的FPGA项目做约束文件时候遇到的一点关于FPGA专用时钟管脚相关的内容,意在梳理思路、保存学习结果、以供自己日后以及他人参考。
    发表于 08-07 09:20 1705次阅读
    关于FPGA专<b class='flag-5'>用时钟</b>管脚的应用

    STM32 RTC实时时钟(一)

    STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建实时时钟系统。
    的头像 发表于 07-22 15:41 2862次阅读
    <b class='flag-5'>STM32</b> RTC实时<b class='flag-5'>时钟</b>(一)

    基于模块时间计算 CPU 时钟的本地时间

    说明 可以使用该指令读取 CPU 时钟的当前日期和当前时间(模块时间)。 在此指令的 OUT 输出参数中输出读取的日期。得出的值不包含有关本地时区或夏令时的信息。 说明 CPU 时钟
    的头像 发表于 06-28 16:18 562次阅读
    基于模块<b class='flag-5'>时间</b>计算 CPU <b class='flag-5'>时钟</b>的本地<b class='flag-5'>时间</b>

    在FFT应用中为什么要采用时间窗呢?

    傅里叶变换(FFT)实现了时域到频域的转换,是信号分析中最常用的基本功能之一。本文将描述FFT应用中为什么要采用时间窗,以及RBW与时间窗的关系。
    的头像 发表于 06-12 10:57 1425次阅读
    在FFT应用中为什么要采<b class='flag-5'>用时间</b>窗呢?