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); 
    
  • 相关阅读:
    js window对象属相和方法相关整理资料
    js中把字符串转换成number格式方法
    oracle中CAST函数使用简介【转】
    Oracle使用SQL语句修改字段类型
    @GeneratorValue与@GenericGenerator注解使用心得
    @Column 注解详情
    Spring中的注入方式 和使用的注解 详解
    maven教程
    wxpyhon 对话框
    wxpython 按钮等事件的触发
  • 原文地址:https://www.cnblogs.com/ckk-blog/p/14017951.html
Copyright © 2011-2022 走看看