版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luckydarcy/article/details/51552575
  相比于普通单片机,STM32 拥有复杂的时钟系统,相应的控制器称为 RCC(Reset Clock Controller,复位与时钟控制器)。每个外设都配备了外设时钟的开关,当我们不使用某个外设时,可以把这个外设时钟关闭,从而降低 STM32 的整体功耗。因此,在我们使用外设前,必须要开启相应外设的时钟。可以使用的库函数有:

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
1
2
3
4
5
  显然,在开启外设时钟前,先要知道该外设挂载在哪个总线上。以 GPIOC 的 pin4 引脚为例:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
1
  STM32 中的大部分 GPIO 都有复用功能,所以对于有复用功能的 I/O 引脚,还要开启其复用功能时钟。如 GPIO 的 pin4 可以用作 ADC1 的输入引脚,当我们把它作为 ADC1 使用时,需要开启 ADC1 的时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
1
  另外, STM32 的所有 GPIO 都引入到 EXTI 外部中断线上,使得所有的 GPIO 都能作为外部中断的输入源。所以如果把 GPIO 用作 EXTI 外部中断时,还需要开启 AFIO 时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
1
  那么,问题来了!
  AFIO 是什么?AFIO 时钟什么时候需要开启?
  
  我们从《STM32中文参考手册_V10》中找到:对寄存器 AFIO_EVCR、AFIO_MAPR 和 AFIO_EXTICRX 进行读写操作前,应当首先打开 AFIO 的时钟(设置 APB2 外设时钟使能寄存器 RCC_APB2ENR)。
  也就是说:当你需要配置 AFIO 这些寄存器的时候,就需要把 RCC_APB2ENR 寄存器的 AFIO 位置‘1’打开 AFIO 时钟。
  
  跟 AFIO 相关的寄存器有:
  1、 事件控制寄存器(AFIO_EVCR)
  2、 复用重映射和调试I/O 配置寄存器(AFIO_MAPR)
  3、 外部中断配置寄存器1(AFIO_EXTICR1)
  4、 外部中断配置寄存器2(AFIO_EXTICR2)
  5、 外部中断配置寄存器3(AFIO_EXTICR3)
  6、 外部中断配置寄存器4(AFIO_EXTICR4)

看看这些寄存器的定义,我们就明白,这些寄存器是用于“事件控制”、“重映射”、“调试IO配置”、“外部中断”的。例如 AFIO_EXTICRX 用于选择 EXTIx 外部中断的输入源。
  总结:当我们需要配置这些 AFIO 寄存器的时候,就需要打开 RCC_APB2ENR 寄存器的 AFIO 时钟,而不是用到引脚复用功能的时候打开。
————————————————
版权声明:本文为CSDN博主「阿基米东」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lu_embedded/article/details/51552575

stm32复用时钟AFIO什么时候开启相关推荐

  1. stm32 485和232可以用同一个串口吗_STM32的复用时钟何时开启?

    STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~ 什么是复用? 我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的.我们可以通过软件来配置引脚作为GPIO ...

  2. stm32 引脚功能重复_STM32的复用时钟何时开启?

    STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~ 什么是复用? 我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的.我们可以通过软件来配置引脚作为GPIO ...

  3. STM32的AFIO时钟什么时候需要开启

    相比于普通单片机,STM32 拥有复杂的时钟系统,相应的控制器称为 RCC(Reset Clock Controller,复位与时钟控制器).每个外设都配备了外设时钟的开关,当我们不使用某个外设时,可 ...

  4. STM32外设配置—什么时候需要开启AFIO时钟?

    发现问题 定时器.串口,这些都是STM32的外设,在使用时看作GPIO口的一种复用功能. 可是在配置这些外设时钟的时候,不知道大家有没有这样的疑惑,既然作为GPIO口的一种复用功能,为什么不需要开启复 ...

  5. STM32系统时钟默认设置

    "我们一直都说STM32有一个非常复杂的时钟系统,然而在原子或者野火的例程中,只要涉及到时钟,我们却只能看到类似的库函数调用,如RCC_APB2PeriphClockCmd(RCC_APB2 ...

  6. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  7. IO口复用时钟的配置

    定时器输出PWM波的时候,IO口一定要配置成复用推挽输出模式,但是不用开启复用时钟. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO ...

  8. STM32系统时钟设置(标准库)

    1.STM32F407时钟树 2.系统时钟相关的结构 HSE高速外部时钟信号 锁相环PLL 锁相环的主要作用就是对时钟进行倍频,然后把时钟输出到各个功能部件.PLL有两个,一个主PLL,另一个是专用的 ...

  9. STM32系统时钟设置,采用外部有源晶振相关配置问题

    今天在调试STM32系统时钟设置时遇到一个问题:TIM2定时1Ms,TIM2中断服务函数time++,time=100时LED状态改变.程序运行后发现LED不是按照0.1S的时间闪烁,闪烁的很慢. 查 ...

最新文章

  1. android adb shell 命令大全
  2. sql时间转换时分秒_SQL数据库中的是年月日时分秒格式的,什么语句能实现年月日的查询?...
  3. 五十六、从高中碾转相除法、更相减损术算法谈起
  4. SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁
  5. 检测和测试停滞的流– RxJava常见问题解答
  6. 重启计算机后桌面顺序是反的,Win10系统为什么重启电脑之后桌面上的图标排列顺序被打乱该如何处理...
  7. 苹果手机的隔空投送怎么使用?
  8. Eclipse!!!!!!!!!!!!!!!!!!
  9. 先查出已知的 然后将未知的当做 having里面的条件
  10. RuntimeError: failed to execute [‘dot‘, ‘-Tpdf‘, ‘-O‘, ‘test‘], make sure the Graphviz executables
  11. python复杂非线性方程_python – 如何解决Sympy中的非线性方程?
  12. QT的TreeWidget遍历文件夹并且显示(递归实现)
  13. Keil代码折来叠功能显示与隐藏!!!
  14. St. Luke’s University Health Network是世界首批试用远程患者管理解决方案Masimo SafetyNet™来协助COVID-19住院患者的机构之一
  15. ODM/OEM/OBM区分
  16. FFplay文档解读-31-视频过滤器六
  17. 咕咕漫画之弹窗破解去除
  18. linux 消息队列的单工通信,半双工通信
  19. git出现的若干问题以及解决方案
  20. php odbc连接池,修复︰ 使用连接池的 SQL Server ODBC 连接时设置的连接属性失败

热门文章

  1. 如何把握个股分时图的走势,在盘中捕捉涨停板?
  2. 计算机字长通常不可能,计算机的字长通常不可能为( )位。
  3. 华为笔试时发现golang ACM模式输入的一个坑
  4. Outlook附件自动存储
  5. 具有实践精神的理论家;我们时代的达芬奇------高德纳访谈录
  6. 网站域名被拦截,网站被流量劫持,该怎么做?
  7. 【转】Awesome Python中文版来啦!
  8. oracle数据库or exists,Oracle Not Exists运算符
  9. Linux命令全称(转)
  10. 打卡leetcode第12天