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
    +关注

    关注

    2275

    文章

    10942

    浏览量

    358942
  • 串口
    +关注

    关注

    14

    文章

    1570

    浏览量

    77608
  • GPIO
    +关注

    关注

    16

    文章

    1223

    浏览量

    52706
收藏 人收藏

    相关推荐

    北斗卫星同步时钟系统:精准时间的秘密

    办公楼中,所有的电脑、时钟甚至是楼宇的自动化系统,都显示着同一个时间。这个时间均来源于北斗卫星同步时钟系统。这个系统由一个母钟(主时钟)和一
    的头像 发表于 12-03 14:19 376次阅读
    北斗卫星同步<b class='flag-5'>时钟</b>系统:精准<b class='flag-5'>时间</b>的秘密

    物联网系统硬件方案的“脉搏”_时钟详解

    01 物联网系统中为什么要使用 时钟芯片 在物联网系统中使用时钟芯片的原因主要体现在以下几个方面: 时间同步的重要性 物联网设备通常需要基于时间执行各种任务,如数据采集、事件记录、定时
    的头像 发表于 09-26 14:57 873次阅读
    物联网系统硬件方案的“脉搏”_<b class='flag-5'>时钟</b>详解

    STM32的HAL库如何开启FPU?

    求:STM32的HAL库如何开启FPU?
    发表于 05-16 07:26

    关于复用和映射的疑问求解

    弱弱的问个问题啊,大神勿喷,如标题所示的这样。 就是比如USART3原来是PA1,PA2引脚的复用功能,你首先开了GPIOA和USART3的时钟,然后配置了GPIOA的这个1,2复用,然后配置下
    发表于 05-13 07:40

    STM32如何确定ADC的时钟频率?

    想请教一个STM32的AD问题:如何确定ADC的时钟频率(信号的采用频率)? 首先:STM32手册给出的 t=1.5,7.5,...239.5 是采样保持的时间,对吧,再加上12.5
    发表于 04-23 07:52

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

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

    stm32定时器在初始化参数之前是否必须开启对应时钟

    参数的时候,对应定时器时钟并没有开启,导致PWM不能正常输出,当在这些函数之前,开启对应时钟,就正常了。看是调试对比,TIM的寄存器没有差别,不知道为什么,所以问一下在初始化参数之前是
    发表于 04-18 06:42

    STM32F410端口复用SPI5,引脚电平很低的原因?

    STM32F410复用为硬件SPI5口,做DMA输入,不需要输出,如果用软件模拟的SPI口没有问题,电平是正常的3.3v,如果复用成硬件SPI5口,不论是时钟还是数据线上的电平都非常低
    发表于 04-12 07:29

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

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

    如何减少STM32F103 ADC采集时间

    路ADC采集,采用时间为7.5周期,测试出来每通道采样时间居然为10ms,当采用时间为239.5周期时,采样时间高达134ms。换了另一块板也一样。
    发表于 04-10 08:20

    有关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

    STM32F4内部的DAC可以分时复用吗?

    请问,STM32F4内部的DAC可以分时复用吗?
    发表于 03-28 08:38

    STM32H743外部时钟输入采用25MHz有源晶振,设备正常工作一段时间STM32不再工作的原因?

    STM32H743外部时钟输入采用25MHz有源晶振,目前出现的问题是:设备正常工作一段时间后(时间不定,有时几分钟,有时二十多分钟),STM32
    发表于 03-22 12:08

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

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