STM32部分外设的第二功能引脚映射
作者:JCY
时间:2012年12月11日
STM32F是ST(意法半导体公司)的产品,本芯片的设计支持了芯片上部分外设第二功能的引脚映射。这为设计STM32的电路板提供了方面,大大简化了电路的设计。当第一次看到AFIO功能的时候感到很困惑,一直不理解,但是最近突然明白了。不敢独享,写此文章与大家分享。本文章纯属个人的理解,如有任何的错误之处请指正,将不胜感激。
我们可以这样理解,对于每一个GPIO来说,他只有普通IO口的功能,并没有像CNA、UART、SPI、TIMER、I2C、I2S、外部中断等外设。那么就不存在所谓第二功能了。假设现在我们在芯片上要加一个UART1的外设,此UART没有涉及到硬件流控制。所以该外设与外界的通信只需要两个引脚,即TX和RX。但是我们要TX和RX连接到那里哪?无论是STC89C52的51单片机还是ATMEGA16的AVR单片机,他们都是将TX和RX与某引脚直接共用,TX和RX的引脚也只能在此引脚上,不肯能被改变的。但是STM32却改变了普遍的半导体公司的一贯做法,使用了第二功能引脚的映射。我们以STM32芯片上的UART1为例来说明一下。默认的UART1的第二功能引脚TX1和RX1分别在PA.9和PA.10上。TX1和RX1的引脚在PA.9和PA.10并不是固定的,TX1和RX1的第二功能引脚可以在PB.6和PB.7上,那么PA.9和PA.10只能使用它的普通IO功能了。
STM32中有一个寄存器叫AFIO_MAPR。它控制了第二功能的引脚在那个GPIO口上使用。现将该寄存器的内容粘贴如下:
看到了bit2位了吗?它控制了UART1通信引脚TX1和RX1映射到哪一个引脚上。
芯片手册对该为的解释如下:
如果你使用了UART0来进行串口的通信。可以将芯片外部的TX和RX引脚分别接在PA.9和PA.10或者PB.6和PB.7上。这都能够实现。
当接在PB.6和PB.7上时需要将USART1_REMAP为设置为1。这样就OK了。