端口複用
端口複用介紹
STM32 有很多的內置外設,這些外設的外部引腳都是與 GPIO 複用的。也就是說,一個 GPIO如果可以複用爲內置外設的功能引腳,那麼當這個 GPIO 作爲內置外設使用的時候,就叫做複用。
具體哪些 GPIO 管腳是可以複用爲哪些內置外設的參考相關資料。(《STM32 中文參考手冊 V10》的 P109, P116~P121 )
外設: 外部設備簡稱“外設”,是指連在計算機主機以外的硬件設備。對數據和信息起着傳輸、轉送和存儲的作用,是計算機系統中的重要組成部分
複用端口初始化步驟
1.使能相應GPIO 端口時鐘。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA
2.複用的外設時鐘使能。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//爲了端口 PA9,PA10 複用爲串口,使能串口時鐘
3.配置端口模式:GPIO_Init()函數
不同複用外設參考相應資料(《STM32 中文參考手冊 V10》 8.1.11 一節內容)
例:PA9,PA10複用爲串口1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);IO時鐘使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);外設時鐘使能
//初始化IO爲對應模式
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP; //模式選擇爲複用推輓輸出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速率選擇爲50M
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; //模式選擇爲浮空輸入
GPIO_Init(GPIOA,&GPIO_InitStructure);
重映射
重映射簡介
爲了使不同器件封裝的外設 IO 功能數量達到最優,可以把一些複用功能重新映射到其他一些引腳上。 (更好地安排引腳的走向與功能)
即一個外設的引腳除了具有默認的端口外,還可以通過設置重映射寄存器的方式,把這個外設的引腳映射到其它的端口。
重映射步驟
1.使能被重映射的IO端口時鐘。
2.使能被重映射的外設時鐘。
3.使能AFIO時鐘
4.開啓重映射
第三步,開啓AFIO的情況:
對寄存器AFIO_MAPR,AFIO_EXTICRX與AFIO_EVCR進行讀寫操作,則應打開AFIO時鐘
AFIO_MAPR:配置複用功能重映射
AFIO_EXTICRX:配置外部中斷線映射(X=1,2,3,4)
AFIO_EVCR:配置EVENTOUT事件輸出
例:將原PA9,PA10的複用串口1重映射到PB6,PB7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能 GPIOB 時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口 1 時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能 AFIO 時鐘
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//開啓重映射,根據第一個參數確定部分重映射還是全部重映射
部分重映射:功能外設的部分引腳重新映射,還有一部分引腳是原來的默認引腳。
完全重映射:功能外設的所有引腳都重新映射。