前言
STM32F4 有很多的內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與 GPIO 復(fù)用的。也就是說,一個(gè) GPIO 如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當(dāng)這個(gè) GPIO 作為內(nèi)置外設(shè)使用的時(shí)候,就叫做復(fù)用。 這部分知識(shí)在《STM32F4 中文參考手冊》第七章和芯片數(shù)據(jù)手冊有詳細(xì)的講解哪些 GPIO 管腳是 可以復(fù)用為哪些內(nèi)置外設(shè)。
STM32F4 系列微控制器 IO 引腳通過一個(gè)復(fù)用器連接到內(nèi)置外設(shè)或模塊。該復(fù)用器一次只允 許一個(gè)外設(shè)的復(fù)用功能(AF)連接到對(duì)應(yīng)的 IO 口。這樣可以確保共用同一個(gè) IO 引腳的外設(shè)之 間不會(huì)發(fā)生沖突。 每個(gè) IO 引腳都有一個(gè)復(fù)用器,該復(fù)用器采用 16 路復(fù)用功能輸入(AF0 到 AF15),可通過 GPIOx_AFRL(針對(duì)引腳 0-7)和 GPIOx_AFRH(針對(duì)引腳 8-15)寄存器對(duì)這些輸入進(jìn)行配置,每四 位控制一路復(fù)用: 1)完成復(fù)位后,所有 IO 都會(huì)連接到系統(tǒng)的復(fù)用功能 0(AF0)。 2)外設(shè)的復(fù)用功能映射到 AF1 到 AF13。 3)Cortex-M4 EVENTOUT 映射到 AF15。

引腳圖













GPIO口復(fù)用與映射
STM32有很多的內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與GPIO復(fù)用的。也就是說,一個(gè)GPIO如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當(dāng)這個(gè)GPIO作為內(nèi)置外設(shè)使用的時(shí)候,就叫做復(fù)用。
例如串口1 的發(fā)送接收引腳是PA9,PA10,當(dāng)我們把PA9,PA10不用作GPIO,而用做復(fù)用功能串口1的發(fā)送接收引腳的時(shí)候,叫端口復(fù)用。
注意:
STM32F4系列微控制器IO引腳通過一個(gè)復(fù)用器連接到內(nèi)置外設(shè)或模塊。該復(fù)用器一次只允許一個(gè)外設(shè)的復(fù)用功能(AF)連接到對(duì)應(yīng)的IO口。這樣可以確保共用同一個(gè)IO引腳的外設(shè)之間不會(huì)發(fā)生沖突。文章來源:http://www.zghlxwxcb.cn/news/detail-617881.html
每個(gè)IO引腳都有一個(gè)復(fù)用器,該復(fù)用器采用16路復(fù)用功能輸入(AF0到AF15),可通過GPIOx_AFRL(針對(duì)引腳0-7)和GPIOx_AFRH(針對(duì)引腳8-15)寄存器對(duì)這些輸入進(jìn)行配置,每四位控制一路復(fù)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-617881.html

AFRL寄存器


當(dāng)需要使用復(fù)用功能的時(shí)候,我們配置相應(yīng)的寄存器 GPIOx_AFRL 或者 GPIOx_AFRH,讓對(duì)應(yīng)引 腳通過復(fù)用器連接到對(duì)應(yīng)的復(fù)用功能外設(shè)。這里我們列出 GPIOx_AFRL 寄存器的描述, GPIOx_AFRH 的作用跟 GPIOx_AFRL 類似,只不過 GPIOx_AFRH 控制的是一組 IO 口的高八位,GPIOx_AFRL 控制的是一組 IO 口的低八位。
使用GPIO_PinAFConfig()//函數(shù)進(jìn)行復(fù)用功能的配置
端口復(fù)用配置步驟

以PA9,PA10配置為串口1為例
①GPIO端口時(shí)鐘使能。
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
②復(fù)用外設(shè)時(shí)鐘使能。
比如你要將端口PA9,PA10復(fù)用為串口,所以要使能串口時(shí)鐘。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
③端口模式配置為復(fù)用功能。 GPIO_Init()函數(shù)。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復(fù)用功能
④配置GPIOx_AFRL或者GPIOx_AFRH寄存器,將IO連接
到所需的AFx。
/*PA9連接AF7,復(fù)用為USART1_TX */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
/* PA10連接AF7,復(fù)用為USART1_RX*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA時(shí)鐘 ①
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時(shí)鐘 ②
//USART1端口配置③
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9與GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復(fù)用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復(fù)用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10
//串口1對(duì)應(yīng)引腳復(fù)用映射 ④
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9復(fù)用為USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10復(fù)用為USART1
到了這里,關(guān)于【STM32】STM32F4 GPIO口映射與復(fù)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!