IO 口的复用最近在学习 STM32,在 BZ 上一篇关于的串口通信文章里有这么一段代码:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);当初是参考开发的例子写的,一直对 GPIOD 或上“RCC_APB2Periph_AFIO〞这句话的意思没搞懂,通过这几天在网上查找资料和看手册,终于高清楚了,不敢独享,希望能对跟我一样的新手有所帮助吧 o(∩_∩)o...一、STM32 上有很多 I/O 口,也有很多的置外设,像 I2C,ADC,ISP,USART 等 ,为了节约引出管脚,这些置外设根本上是与 I/O 口共用管脚的,也就是 I/O 管脚的复用功能。但是 STM32 还有一特别之处就是:很多置外设的 I/O 复用引脚可以通过重映射功能,从不同的 I/O 管脚引出,即使用了复用功能的引脚是可通过程序改变的。知道了这些我们就不难理解上面代码的意思了,程序中用到的 USART2 外设的 TX,RX 分别对应 PA2,PA3,但是我的学习板上的 PA2,PA3 引脚接了其他设备,但是为了还要用 USART2,“RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO〞就翻开了 GPIOD 重映射功能,把USART2 设备的 TX,RX 映射到 PD5,PD6 上,我们在这两个引脚上接上 MAX232 串口芯片就可以使用 USART2 串口通信了。那各位看官该问:“USART2 是不是可以映射到任意管脚呢?〞答案是否认的,它只能映射到固定的管脚,下列图是 USART2 重映射表其他外设的重映射可以参考 STM32100X 手册。二、为了节约 IO 资源单片时机在一个 IO 上复用很多功能,一般来说,单片机IO 口用到了一个功能后就能再用另外的复用功能〔对应的外设〕了,这就表达出了 STM32 GPIO 的强大了,我们用重映射的方法把其中一个外设映射到其他 IO脚上,这样就可以充分利用片资源! 也许你以为 IO 和 AFIO 是很简单的,事实上有几个误区可能很多人都没注意过,当你只用现成的开发板来学习的时候,别人已经帮你做好了资源分配,所有的外设功能学习都是照着别人给你的例程去做的,这才没让你觉得奇怪。先问自己一个问题:STM32 中,USART2 和 TIM2 是共用一样 IO 的,你如何决定这几个 IO 到底是做 USART2 还是做 TIM2 呢?假如你要同时使用 USART2 和TIM2,该怎么办?1、不是说使用了 IO 的复用功能就一定要启动 RCC_APB2Periph_AFIO 的 Clock的,参考下列图只有使用了 AFIO 的事件控制存放器〔AFIO_EVCR〕、AFIO 的重映射功能(AFIO_MAPR)以与外部中断(A...