1、首先要有管脚复用功能AFIO;
2、其次被复用的管脚一定是挂载在APB2上的,因为AFIO就是在APB2上;
3、最后就是内置外设一定是上述APB2表中没有的,因为APB2有的话,直接打开就好了,也用不到打开AFIO;
规律:
1.假如是用到挂载在APB2下的内置外设,比如下图中的ADC1/2,TIM1,SPI1,USART1,也算是管脚复用,但不需要打开AFIO语句,而是直接打开相应内置外设就好了;
即不需要
//打开管脚复用
AFIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
2、同理如上
最重要的一点
只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断EXTI控制寄存器才需要开启AFIO的时钟、stm32参考手册从来没有说过使用IO的复用功能就一定要开启AFIO时钟这个误区。APB1、2时钟下面的外设IO复用他自动帮打开了AFIO时钟不需要自己打开,但上面三个没有自动打开需要自己手动打开即
//打开管脚复用AFIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);