zoukankan      html  css  js  c++  java
  • AFIO时钟

    部分转自openedv论坛,原帖地址:http://www.openedv.com/thread-19454-1-1.html


    理解提炼,整理如下:

    Q:时钟是什么?时钟怎么来的?

    A:首先,时钟就是频率一定的周期信号,这种周期信号可能是类正弦波,也可能是方波。那么stm32的时钟从哪里来呢?原来stm32的时钟来源很多,可以使用内部RC时钟,也可以使用外部晶振提供时钟。通常建议采用外部晶振。外部晶振分为2种:有源晶振、无源晶振。有源晶振通常输出方波信号,无源晶振通常输出正弦波信号。可以形象的将时钟理解为人的心跳,有了心跳才能输送营养物质到全身,人才能进行一系列活动。否则,没有心跳,一切免谈。

    Q:刚接触stm32时,就被其复杂的时钟树弄的眼花缭乱,不明白为什么需要这么复杂的时钟树?不能把所有的时钟统一一下么?

    A:首先stm32不同于51单片机,本身就很复杂,其内置的外设非常多。但并不是所有外设都需要系统时钟那么高的频率,比如看门狗及RTC(实时时钟)只需要几十kHz的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱。所以对于较为复杂的mcu,一般都是采取这种多时钟源的方式。在具体的工程应用中,并不需要用到stm32提供的所有外设,这样通过时钟的开关,可以关闭那些没有使用的外设,降低功耗。

    Q:为什么要开启时钟?何时开启时钟?

    A:开启时钟的目的很明确:因为要对寄存器进行读写!在没有开启时钟的情况下,对寄存器所做的一切读写都是无效的、徒劳无功的。比如:现在需要使用DMA1模块,理所应当的要对DMA的寄存器进行配置,以实现我们需要的功能。那么此时,必须先在RCC_AHBENR寄存器中设置DMA1EN=1来使能DMA1模式的时钟。根据上面的分析,何时开启时钟就很明了了:当需要对“某个时钟管理的寄存器”进行读写时,必须先使能对应的时钟!

    Q:何时需要开启AFIO时钟?

    A:有了上面的分析,这个问题就很简单了。当需要对“AFIO管理的寄存器”进行读写时,必须使能AFIO时钟。那么由AFIO时钟管理的寄存器有哪些呢?查找参考手册有如下说明:

    To read/write the AFIO_EVCR, AFIO_MAPR and AFIO_EXTICRX registers, the AFIO clock should first be enabled. (Page 182)

    也就是说,当需要读写AFIO_EVCR(时间控制寄存器)、AFIO_MAPR(备用功能重映射和调试IO配置寄存器)、AFIO_EXTICRX(外部中断配置寄存器)寄存器时,需要先开启AFIO时钟。

  • 相关阅读:
    Resharper进阶一
    脚本(js)控制页面输入
    IE图标消失 HTML文件图标变为未知图标的解决方法
    memcache_engine + memcachedb = 高性能分布式内存数据库
    sql 求差值
    MSN、QQ的网页链接代码
    IFrame语法:IFrame实例应用集
    Memcache协议
    Windows下的Memcache安装
    文本框 价格 保留两位小数 讨论
  • 原文地址:https://www.cnblogs.com/arthurtech/p/7411428.html
Copyright © 2011-2022 走看看