stm32-USART1重映射
首先來說下什么是端口復(fù)用。
STM32有很多的內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與GPIO復(fù)用的。也就是說,一個GPIO如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當這個GPIO作為內(nèi)置外設(shè)使用的時候,就叫做復(fù)用。
其實說白了,簡單易懂的說,就是某些普通的外設(shè)引腳也可以用來其它功能。比如說那我使用的正點原子哥的板子來說吧,串口1 的發(fā)送接收引腳是PA9,PA10,當我們把PA9,PA10不用作普通的GPIO口,而用做復(fù)用功能串口1的發(fā)送接收引腳的時候,叫端口復(fù)用。
接下來說下端口復(fù)用的配置過程
首先,GPIO端口時鐘使能。(這個不管用不用端口復(fù)用,要使用某個IO口必須要對時鐘進行使能)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);接下來就是你要使能復(fù)用外設(shè)時鐘。(這里以串口1為例)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);接下里就是端口模式配置。 GPIO_Init()函數(shù)。
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
這個可以參考(這里僅僅貼出了串口和定時器的端口配置模式)
以上就是端口復(fù)用的配置。
接下來說下什么是重映射。
每個內(nèi)置外設(shè)都有若干個輸入輸出引腳,一般這些引腳的輸出端口都是固定不變的,為了讓設(shè)計工程師可以更好地安排引腳的走向和功能,在STM32中引入了外設(shè)引腳重映射的概念,即一個外設(shè)的引腳除了具有默認的端口外,還可以通過設(shè)置重映射寄存器的方式,把這個外設(shè)的引腳映射到其它的端口。
為了使不同器件封裝的外設(shè)IO功能數(shù)量達到最優(yōu),可以把一些復(fù)用功能重新映射到其他一些引腳上。STM32中有很多內(nèi)置外設(shè)的輸入輸出引腳都具有重映射(remap)的功能。
打個比方說,串口1的TX,RX引腳是在PA9,和PA10端口,但是同時它有兩個映射端口PB6,PB7。開啟重映射,PB6和PB7同樣可以使用串口1。
詳情可參考下表關(guān)于串口1和串口2的重映射表。
此外,還有有一個部分重映射,所謂部分重映射,顧名思義,就是有部分的端口進行了重映射。
比如time1(當做部分映射時,TIM1_BKIN為PA6引腳,而作為完全重映射是為PE15引腳而TIM1_ETR一直為PA12引腳)
接下來還是以串口1為例寫下配置過程。
首先,使能GPIO時鐘(注意:重映射后的IO);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);接下來是使能功能外設(shè)時鐘;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);然后是使能AFIO時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);這里注明下為什么要使能這個AFIO時鐘。
對寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR進行讀寫操作前,應(yīng)當首先打開AFIO時鐘。
AFIO_MAPR:配置復(fù)用功能重映射?
AFIO_EXTICRX:配置外部中斷線映射?
AFIO_EVCR:?? 配置EVENTOUT事件輸出
最后要開啟重映射:
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);之后只需要再次初始化GPIO端口即可。
以上也就是端口重映射的配置過程了。
總結(jié)
以上是生活随笔為你收集整理的stm32-USART1重映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么时候需要用到RCC_APB2Peri
- 下一篇: STM32串口的部分映射与完全映射