STM32F103學習筆記-AFIO相關

一、背景

  在寫外部中斷及其配置的筆記時候,發現無論是開發攻略還是官方手冊裏都提到了這麼一句話:
AFIO

  雖然在學習GPIO的時候,看到了AFIO表示的是複用功能IO的意思,但對於它的理解完全是字面上的理解。這導致了在看到開啓AFIO時鐘的時候,我還一臉懵逼,這是在幹啥呢?還好,在網絡上查找後,我對AFIO有了一個比較完整的認識。

二、由開發板的原理圖想到的問題

  放一張玩STM32的人都熟悉的不能再熟悉的圖:
STM32mini.Schdoc
  可以看到除了晶振、VCC、GND等少數外幾乎每個IO口都有其他的用途,例如PA13既可以用作JTMS也可以用作SWDIO。那麼怎麼由一個IO口實現這兩個功能呢?這兩個功能可以同時靠這一個IO口實現麼?如果只能實現一個,但當我需要讓功能都實現的時候又該怎麼辦呢?
  這些問題的答案,也正是AFIO所要實現的功能,也正是AFIO的存在,才使得STM32的引腳能發揮多種多樣的功能。

三、AFIO簡介

  其實,(二)中所述的問題都是管腳複用的問題。MCU不僅CPU需要管腳而且內置外設也需要管腳,但是STM32的管腳數量是有限的,這就導致了有的管腳不僅是作爲普通IO的存在,更是作爲外設IO的存在,這就是管腳複用現象。而普通管腳就是GPIO,複用管腳就是我們所說的AFIO。也就是說,如果要用到外設功能,則必須要用的到外設IO(即AFIO)。

四、什麼時候要開啓AFIO

  以上解決的是“什麼時候要用到AFIO”的問題,但是在一些例程中,我們卻可以發現:有的例程直接開啓了外設,有的卻需要先開啓AFIO再開啓外設。(開啓外設和開啓AFIO指的都是開啓各自的時鐘

//開啓AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  那麼什麼時候需要開啓AFIO,什麼時候又不需要開啓呢?CSDN上的一篇博文總結的非常到位,先摘錄如下:(以下內容來自:STM32F103:什麼時候需要複用IO(AFIO)?

1、下表中的掛載在APB2上的外設可以不需要開啓AFIO而直接開啓
APB2

2、下表中的掛載在APB1上的外設可以不需要開啓AFIO而直接開啓
APB1

3、掛載在APB1下的內置外設,經過重映射功能,把管腳映射到APB2上時,需要先開啓AFIO,也就說滿足以下幾個條件時,會開啓AFIO:
1)要有管腳複用功能AFIO
2)被複用的管腳一定是掛載在APB2上的,因爲AFIO就是在APB2上;
3)內置外設一定是上述APB1、APB2表中沒有的,因爲如果有的話,直接打開就好了,也用不到打開AFIO。

初學者務必需要注意區分直接打開APB1外設和將APB1外設重映射到APB2外設的區別(即:只有當某功能需要被複用至其本來對應的IO口之外的其他IO口時,才需要打開AFIO):

舉個例子,如果USART2的TX/RX對應的複用IO口PA2/3沒有被佔用,
那麼由於APB1表中有USART2,所以就可以直接打開外設使用;
但當USART2的TX對應的複用IO口PA2已經被Timer2的channel3使用時,
則需要把USART2的TX/RX重映射到PD5/6。
這時候儘管APB1表中有USART2但仍需要開啓AFIO。

補充:在配置外部中斷(EXTI)到對應GPIO口時,也需要啓動AFIO時鐘。程序編寫如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //開啓AFIO時鐘

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); //將EXTI與GPIO進行連接

五、怎麼重映射內置外設

  重映射內置外設往往需要經過以下幾個步驟:
  1、使能被重新映射到的I/O端口時鐘;
  2、使能被重新映射的外設時鐘;
  3、打開AFIO時鐘;
  4、調用重映射函數GPIO_PinRemapConfig,完成重映射配置

//將USART1的TX和RX分別重映射到PB6和PB7的例程	
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
	
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
		
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

發佈了12 篇原創文章 · 獲贊 22 · 訪問量 3454
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章