0x01 > 什么是端口復(fù)用
STM32有很多的內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與GPIO復(fù)用的。
一個(gè)GPIO如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當(dāng)這個(gè)GPIO作為內(nèi)置外設(shè)使用的時(shí)候,就叫做復(fù)用。

通過上圖我們可以將 PA9、PA10 復(fù)用為 USART1_TX UASRT1_RX 或 定時(shí)器 TIM1的通道2和通道3
0x02 > 端口復(fù)用
端口復(fù)用步驟包括
- 使能端口時(shí)鐘
- 使能復(fù)用的端口時(shí)鐘
- 對(duì)應(yīng)的端口模式設(shè)置
在配置復(fù)用端口時(shí)如何選擇端口模式 ?
在 IO 復(fù)用位內(nèi)置 外設(shè)功能引腳的時(shí)候,必須設(shè)置GPIO 端口的模式,至于在復(fù)用功能下 GPIO 的模式是怎么對(duì)應(yīng),這個(gè)可以查看手冊(cè)《 STM32 STM32中文參考手冊(cè) V10 》 P110 的表格“ 8.1.11外設(shè)的 GPIO 配置”。
配置舉例
USART引腳配置
0x03 > 端口重映射
說(shuō)到端口復(fù)用,就順便說(shuō)說(shuō)端口的重映射。首先要知道什么是重映射,重映射有什么用,怎么使用端口的重映射。對(duì)于重映射我們將在以后的文章中慢慢分享,同樣端口復(fù)用現(xiàn)在不可理解也沒關(guān)系,在以后講解串口的文章中我們會(huì)再次用到端口復(fù)用。那么就先來(lái)看看什么是端口重映射
0x001 > 什么是端口重映射
為了使不同器件封裝的外設(shè) IO 功能數(shù)量達(dá)到最優(yōu),可以把一 些復(fù)用重新映射到其他一些引腳上。
STM32 中有很多內(nèi)置外設(shè)的輸入輸出引腳都具重映射(remap) 的功能 。我們知道每個(gè)內(nèi)置外設(shè)都有若干個(gè)輸入出引腳,一般這些的端口都是固定不變的,為了讓設(shè) 工程師可以更好地安排引腳的走向和功能,在 STM32 中引入了外設(shè)腳重映射的概念,即一個(gè)外設(shè)的引腳除了具有默認(rèn)端口外,還可以通過設(shè)置重映射寄存器的方式,把這個(gè)引腳映射到其它的端口 。
簡(jiǎn)單的講就是把管腳的外設(shè)功能映射到另一個(gè),但不是可以隨便映射的,具體對(duì)應(yīng)關(guān)系《STM32 中文參考手冊(cè) V10 》的 P116 頁(yè)“ 8.3 復(fù)用功能和調(diào)試配置”

0x002 > 怎么使用端口重映射
- 使能對(duì)應(yīng)的端口時(shí)鐘
比如我們現(xiàn)在將 USART1 的 RX 和 TX 管腳從原本的 PA10 和 PA9 重映射到 現(xiàn)在的 PB7 和 PB6 上,需要開啟GPIOB的時(shí)鐘。 - 開啟功能時(shí)鐘
比如我們現(xiàn)在需要使用 USART1 我們就要開啟 USART1 的時(shí)鐘,也就是串口1的時(shí)鐘。 - 開啟復(fù)用功能 (AFIO)的時(shí)鐘
既然使用復(fù)用功能,我們就要開啟復(fù)用時(shí)鐘 - 開啟重映射
我們現(xiàn)在已經(jīng)完成了所有準(zhǔn)備工作,只需要打開對(duì)應(yīng)的重映射功能就可以將原本的管腳重映射到對(duì)應(yīng)的管腳了。
0x04 > 總結(jié)
端口復(fù)用和重映射這種理論向的內(nèi)容,讀者你可以查看其他作者的文章,我相信人家比我寫的好。
下面來(lái)總結(jié)一下:
- 端口的復(fù)用就是讓我們可以使用片上外設(shè),再也不用像51單片機(jī)一樣去用更多的擴(kuò)展芯片,增加電路成本。
- 端口的重映射 就是讓我們的硬件工程師在設(shè)計(jì)電路時(shí)可以更加靈活運(yùn)用每一個(gè)端口,減小了電路板設(shè)計(jì)的復(fù)雜導(dǎo)線問題
本文并沒有任何代碼實(shí)現(xiàn),在以后的文章中我們會(huì)說(shuō) 串口通信時(shí) 會(huì)使用本文的知識(shí)點(diǎn),在學(xué)習(xí)ADC時(shí)同樣會(huì)使用本文的知識(shí)。單片機(jī)編程在于多練,多試驗(yàn),只有在錯(cuò)誤的山中才能找到解決錯(cuò)誤的途徑。
如有錯(cuò)誤,歡迎指正,對(duì)您有幫助,點(diǎn)個(gè)贊再走 (>..<)
