STM32什么时候需要复用IO(AFIO)
AFIO介绍:
MCU有对外管脚,包括CPU的管脚和内置外设(PWM,TIM,ADC……)的管脚;
他们都需要对外接口IO,但是管脚总数是有限的,有的管脚既作为普通IO,也作为外设IO,有时候甚至好几个内置外设共用一个IO,这就是管脚复用现象。
比如随便一个管脚的原理图上:
PA2/USART2_TX/ADC123_IN2/TIM5_CH3/TIM2_CH3
表明这个管脚除了作为普通PA2之外,还作为复用IO,有USART2,ADC,TIM5,TIM2等……
总结:
- 普通管脚就是GPIO,复用管脚(非普通管脚)就是AFIO;
- 只要用到内置外设的管脚,都需要打开复用IO(AFIO),比如对外输出PWM波形,使用AD转换等。
来源:https://blog.****.net/u013082827/article/details/77543394
2.假如是挂载在APB1下的内置外设,比如下图中,也用到了AFIO,也不用打开AFIO语句,而是直接打开相应内置外设就行了;
说来说去,什么时候用到打开AFIO呢?
首先要有管脚复用功能AFIO;
其次被复用的管脚一定是挂载在APB2上的,因为AFIO就是在APB2上;
最后就是内置外设一定是上述APB2表中没有的,因为APB2有的话,直接打开就好了,也用不到打开AFIO;
根据以上条件,打开AFIO的只有一种情况,那就是:
挂载在APB1下的内置外设,经过重映射功能,把管脚映射到APB2上!
其实,一旦使用重映射功能,只能映射到APB2上,因为APB2表中第二个框子里面包括了GPIOA~E,几乎所有的管脚了。
按键中断并不是APB2表中带有的复用,没法直接打开,所以要声明打开AFIO复用!
重映射内置外设步骤:
使能映射到的I/O端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
使能被新映射的外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
使能AFIO功能的时钟(勿忘!)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
打开重映射
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);