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

    在使用片内外设时候,有时候会疑惑,什么时候需要编写打开复用功能AFIO时钟这一条语句?

      //打开复用功能时钟
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    

    AFIO

    复用引脚的出现,是因为一方面我们希望单片机面积小,但是引脚数量是有限的,另一方面一个产品中并不会使用单片机的全部功能,所以把片上外设的引脚和GPIO引脚进行了共用,也就是复用(重复使用)。

    看下I/O段端口结构

    当使用片上外设时,该引脚就是开启了复用功能AF,此时称其为复用引脚AFIO,否则就是普通的GPIO。

    在参考手册中就对AF进行了详尽的描述:

    当片上外设输出时,输入并没有与IO端口断开,我们仍然可以读取IO端口电平。AF是没有复用输入模式的,只有输入模式。

    理论上当需要使用片上外设时候,都需要开启AFIO时钟,但是为什么一些就不需要,直接开启相应外设时钟就可以了?

    何时需要编写打开AFIO时钟

    如果直接挂载在APB1/2总线下的外设,直接打开外设时钟就可以了。

    需要打开AFIO时钟语句的情况:

    1. APB1的外设引脚需要重映射到APB2,因为AFIO时钟是在APB2总线下。

    2. 使用到外部中断,因为外部中断使用到了AFIO相应寄存器,所以也需要打开AFIO时钟这条语句。

    在参考手册AFIO寄存器那里其实就写明了,详细的可以看一下。

    举例,将APB1总线下TIM3的CH1、CH2和CH3根据重映射表,进行完全重映射到APB2总线下的PC端口。

      //打开要映射到的GPIOC和复用功能时钟
      RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE ); 
      //打开定时器3时钟
      RCC_APB1PeriphClockCmd(HALL_TIM_CLK,ENABLE);
      //使能引脚完全重映射
      GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE); 
    
  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/ckk-blog/p/14017951.html
Copyright © 2011-2022 走看看