第6章 通用、復(fù)用及重映射IO_第1頁
第6章 通用、復(fù)用及重映射IO_第2頁
第6章 通用、復(fù)用及重映射IO_第3頁
第6章 通用、復(fù)用及重映射IO_第4頁
第6章 通用、復(fù)用及重映射IO_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第6章通用、復(fù)用及重映射I/O6.1通用、復(fù)用和重映射I/O的關(guān)系通用I/O:通用I/O比較容易理解,就是作為普通的輸入輸出引腳;復(fù)用I/O:有些I/O口不僅可以作為普通I/O口使用,還可以設(shè)置為ADC、SPI等引腳,當(dāng)I/O設(shè)置為ADC的輸入引腳時,就是使用了I/O的復(fù)用功能。一個I/O的復(fù)用功能可以為0個,也可以為多個,具體要看M3的型號。重映射I/O:重映射就是把外設(shè)默認(rèn)的對應(yīng)引腳重新定義到另一個引腳上邊;下面以外設(shè)I2C1說明,I2C1的兩個引腳I2C1_SCL、I2C1_SDA默認(rèn)使用的是PB6、PB7,但是如果在開發(fā)設(shè)計時,PB6、PB7已經(jīng)被使用,而我們又必須使用I2C1來進(jìn)行數(shù)據(jù)傳輸,這時候,我們就要使用到了重映射,重映射后,I2C1_SCL和I2C_SDA分別對應(yīng)PB8和PB9;這樣,我們就可以使用PB8和PB9作為I2C1的引腳來進(jìn)行通信;需要說明的是,并不是每一個外設(shè)都可以進(jìn)行重映射,即使可以進(jìn)行重映射,也不是可以重映射到任意引腳,這個在芯片設(shè)計時已經(jīng)固定了,不同型號的芯片是不一樣的;仍以I2C1為例,I2C1的重映射功能在36引腳芯片就不能使用,在非36引腳的芯片上邊,也只能重映射到PB8和PB9這兩個固定的引腳上邊。復(fù)用和重映射功能解決了外設(shè)多,而I/O數(shù)量一定的矛盾,靈活動態(tài)使用復(fù)用和重映射功能能夠使我們在一些產(chǎn)品的開發(fā)上邊事半功倍,比如,我們可以在某些時刻將I2C1對應(yīng)PB6、PB7,某些時刻對應(yīng)PB8、PB9,這樣涉及到通信的程序就無需進(jìn)行改動,硬件上邊就可以實現(xiàn)引腳的切換。6.2通用I/O寄存器描述6.2.1各種輸入輸出模式介紹模擬輸入:一般是作為ADC采集時使用。上拉/下拉輸入:引腳內(nèi)部接上拉/下拉電阻后作為輸入引腳;浮空輸入:顧名思義,就是引腳既沒有上拉也沒有下拉,懸空作為輸入,此時引腳為高阻態(tài)模式,當(dāng)外部沒有明確的高電平或者低電平輸入時,引腳讀出的0和1沒有實際意義。M3芯片引腳輸入內(nèi)部結(jié)構(gòu)如圖6-1圖6-1M3芯片輸入引腳內(nèi)部結(jié)構(gòu)圖(1)VDD_FT與VDD不同,它是容忍5V電平的特殊處理電源,不是所有的I/O都接VDD_FT開漏輸出:就是I/O不輸出電壓,在低電平時接地,在高電平時類似浮空,需要外接上拉電阻,開漏輸出一般在外接電壓高于M3芯片電壓時使用,當(dāng)引腳容忍5V時,外接5V上拉,可以將輸出高電平拉到5V,不能容忍5V的引腳作為開漏輸出時意義不大,即使外接5V的上拉,輸出高電平時仍然只能輸出3.3V。推挽輸出:這種模式下,I/O引腳通過MOS管進(jìn)行輸出放大,輸出高電平時為3.3V,輸出電流最大50mA,驅(qū)動能力比較強。M3芯片引腳輸出內(nèi)部結(jié)構(gòu)如圖6-2圖6-2M3芯片輸出引腳內(nèi)部結(jié)構(gòu)圖(1)VDD_FT與VDD不同,它是容忍5V電平的特殊處理電源,不是所有的I/O都接VDD_FT6.2.2端口配置低寄存器GPIOx_CRL (x=A...E)每個I/O需要4位進(jìn)行輸入輸出的配置,M3芯片每個寄存器是32位,所以一個寄存器只能配置8個引腳,M3芯片每組端口一般有16個I/O,所以,端口配置分高和低寄存器,高寄存器配置8~15引腳,低寄存器配置0~7引腳。偏移地址:0x00復(fù)位值:0x4444444431302928272625242322212019181716CNF7[1:0]MODE7[1:0]CNF6[1:0]MODE6[1:0]CNF5[1:0]MODE5[1:0]CNF4[1:0]MODE4[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW1514131211109876543210CNF3[1:0]MODE3[1:0]CNF2[1:0]MODE2[1:0]CNF1[1:0]MODE1[1:0]CNF0[1:0]MODE0[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=0…7)軟件通過這些位配置相應(yīng)的I/O端口在輸入模式(MODE[1:0]=00):

00:模擬輸入模式

01:浮空輸入模式(復(fù)位后的狀態(tài))10:上拉/下拉輸入模式

11:保留

在輸出模式(MODE[1:0]>00):

00:通用推挽輸出模式

01:通用開漏輸出模式

10:復(fù)用功能推挽輸出模式

11:復(fù)用功能開漏輸出模式位29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=0…7)軟件通過這些位配置相應(yīng)的I/O端口。00:輸入模式(復(fù)位后的狀態(tài))01:輸出模式,最大速度10MHz10:輸出模式,最大速度2MHz11:輸出模式,最大速度50MHz6.2.3端口配置高寄存器GPIOx_CRH (x=A...E)偏移地址:0x04復(fù)位值:0x4444444431302928272625242322212019181716CNF15[1:0]MODE15[1:0]CNF14[1:0]MODE14[1:0]CNF13[1:0]MODE13[1:0]CNF12[1:0]MODE12[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW1514131211109876543210CNF11[1:0]MODE11[1:0]CNF10[1:0]MODE10[1:0]CNF9[1:0]MODE9[1:0]CNF8[1:0]MODE8[1:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:3027:2623:2219:1815:1411:107:63:2CNFy[1:0]:端口x配置位(y=8…15)軟件通過這些位配置相應(yīng)的I/O端口在輸入模式(MODE[1:0]=00):

00:模擬輸入模式

01:浮空輸入模式(復(fù)位后的狀態(tài))10:上拉/下拉輸入模式

11:保留

在輸出模式(MODE[1:0]>00):

00:通用推挽輸出模式

01:通用開漏輸出模式

10:復(fù)用功能推挽輸出模式

11:復(fù)用功能開漏輸出模式位29:2825:2421:2017:1613:129:85:41:0MODEy[1:0]:端口x的模式位(y=8…15)軟件通過這些位配置相應(yīng)的I/O端口。00:輸入模式(復(fù)位后的狀態(tài))01:輸出模式,最大速度10MHz10:輸出模式,最大速度2MHz11:輸出模式,最大速度50MHz6.2.4端口輸入數(shù)據(jù)寄存器GPIOx_IDR(x=A...E)偏移地址:Ox08復(fù)位值:0x0000XXXX31302928272625242322212019181716保留1514131211109876543210RRRRRRRRRRRRRRRR位31:16保留,讀出數(shù)據(jù)始終為0位15:0端口輸入數(shù)據(jù),這些位只讀,讀出值對應(yīng)I/O狀態(tài)6.2.5端口輸出數(shù)據(jù)寄存器GPIOx_ODR(x=A...E)偏移地址:0x0C復(fù)位值:0x0000000031302928272625242322212019181716保留1514131211109876543210ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW在I/O作為輸出狀態(tài)下,設(shè)置該寄存器輸出對應(yīng)電平;在I/O作為輸入狀態(tài)下,設(shè)置該寄存器對應(yīng)位作為上拉/下拉輸入,1為上拉輸入,0為下拉輸入。位31:16保留,讀出始終為0位15:0這些位可讀可寫6.2.6端口位設(shè)置/清除寄存器GPIOx_BSRR(x=A...E)偏移地址:0x10復(fù)位值:0x0000000031302928272625242322212019181716BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW1514131211109876543210BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0WWWWWWWWWWWWWWWW位31:16BRy:清除端口x的位y(y=0…15)這些位只能寫入并只能以字(16位)的形式操作。

0:對對應(yīng)的ODRy位不產(chǎn)生影響

1:清除對應(yīng)的ODRy位為0注:如果同時設(shè)置了BSy和BRy的對應(yīng)位,BSy位起作用。位15:0BSy:設(shè)置端口x的位y(y=0…15)這些位只能寫入并只能以字(16位)的形式操作。

0:對對應(yīng)的ODRy位不產(chǎn)生影響

1:設(shè)置對應(yīng)的ODRy位為1單獨操作GPIOx_ODR就可以完全控制I/O的輸出了,但是有時候我們需要單獨設(shè)置一個位來單獨操作一個引腳,而又不影響其他引腳的輸出狀態(tài),如果用GPIOx_ODR來實現(xiàn)這個功能;以PA3為例,單獨設(shè)置PA3輸出低電平,我們就需要這樣寫:unsignedintoldState;oldState=GPIOA_ODR; //先讀出當(dāng)前PAI/O狀態(tài)oldState=oldState&(~(1<<3));//將第3位清0GPIOA_ODR=oldState; //重新賦值給GPIOA_ODR如果用GPIOA_BSRR,那這個操作就簡單多了,實現(xiàn)同樣的功能,寫法如下:GPIOA_BSRR=((1<<3)<<16);//設(shè)置BR3為1,其他位都為06.2.7端口位清除寄存器GPIOx_BRR(x=A...E)偏移地址:0x14復(fù)位值:0x0000000031302928272625242322212019181716保留1514131211109876543210BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0WWWWWWWWWWWWWWWW位31:16保留位15:0BRy:清除端口x的位y(y=0…15)這些位只能寫入并只能以字(16位)的形式操作。

0:對對應(yīng)的ODRy位不產(chǎn)生影響

1:清除對應(yīng)的ODRy位為0GPIOx_BRR的功能和GPIOx_BSRR的高16位功能完全相同。6.2.8端口配置鎖定寄存器GPIOx_LCKR(x=A...E)端口配置鎖定寄存器,顧名思義,它的作用就是鎖定I/O端口的配置,使鎖定端口在下次復(fù)位之前都不能再更改配置。鎖定I/O配置,需要先按一定時序執(zhí)行LOCK序列,相當(dāng)于一把鑰匙,只有鑰匙對了,才能開鎖的原理;只有LOCK序列對了,才能進(jìn)行鎖定,否則鎖定是無效的。偏移地址:0x18復(fù)位值:0x0000000031302928272625242322212019181716保留LCKK(RW)1514131211109876543210LCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:17保留位16LCKK:鎖鍵

該位可隨時讀出,它只可通過鎖鍵寫入序列修改。

0:端口配置鎖鍵位激活

1:端口配置鎖鍵位被激活,下次系統(tǒng)復(fù)位前GPIOx_LCKR寄存器被鎖住。

鎖鍵的寫入序列:寫1->寫0->寫1->讀0->讀1最后一個讀可省略,但可以用來確認(rèn)鎖鍵已被激活。

注:在操作鎖鍵的寫入序列時,不能改變LCK[15:0]的值。

操作鎖鍵寫入序列中的任何錯誤將不能激活鎖鍵。

位15:0LCKy:端口x的鎖位y(y=0…15)這些位可讀可寫但只能在LCKK位為0時寫入。

0:不鎖定端口的配置

1:鎖定端口的配置

6.3復(fù)用和重映射對應(yīng)引腳6.3.1重映射初探引腳重映射會用到一個寄存器:復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR),注意這是一個寄存器的名字,而不是兩個寄存器。為了方便讀者理解本節(jié)內(nèi)容,先簡單描述一下AFIO_MAPR寄存器,下個章節(jié)會對AFIO所有寄存器進(jìn)行全面的講解。小、中、大容量芯片復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留SWJ_CFG[2:0]保留ADC2_ETRGREG_REMAPADC2_ETRGINJ_REMAPADC1_ETRGREG_REMAPADC1_ETRGINJ_REMAPTIM5CH4_IREMAPWWWRWRWRWRWRW1514131211109876543210PD01_REMAPCAN_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW互聯(lián)型芯片復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留PTP_PPS_REMAPTIM2ITR1_REMAPSPI3_REMAP保留SWJ_CFG[2:0]MII_RMII_SELCAN2_REMAPETH_REMAP保留TIM5CH4_IREMAPRWRWRWWWWRWRWRWRW1514131211109876543210PD01_REMAPCAN1_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW6.3.2把OSC32_IN/OSC32_OUT作為GPIO端口PC14/PC15當(dāng)把LSE振蕩器關(guān)閉時,可以把OSC32_IN/OSC32_OUT用作PC14/PC15,默認(rèn)狀態(tài)下,LSE打開,需要程序關(guān)掉LSE,才能配置為PC14/PC15。當(dāng)關(guān)閉1.8V電壓區(qū)(進(jìn)入待機(jī)模式)或后備區(qū)域使用VBAT供電(不再有VDD供電)時,不能使用PC14/PC15的GPIO口功能;注:由于PC13、PC14、PC15使用電源開關(guān)進(jìn)行供電,而這個電源開關(guān)只能吸收有限的電流(3mA),因此,這三個引腳在同一時間只能有一個引腳作為輸出,且工作在2MHz模式下,不能作為電流源。6.3.3把OSC_IN/OSC_OUT作為GPIO端口PD0/PD1對于OSC_IN/OSC_OUT引腳來說,它的默認(rèn)功能是作為晶振的輸入輸出引腳,復(fù)用功能才是作為GPIO;PD01_REMAP=0PD01_REMAP=1OSC_INPD0OSC_OUTPD16.3.4CAN1復(fù)用功能重映射CAN信號可以被映射到A、B、D端口,在36、48、64引腳封裝的芯片上,沒有端口D的重映射。1.在互聯(lián)型產(chǎn)品里是AN_RX/AN_TX;其他帶有單個CAN的產(chǎn)品里是CAN_RX/CAN_TX。2.重映射不適用與36引腳封裝的芯片。3.當(dāng)PD0和PD1沒有被重映射到OSC_IN/OSC_OUT時,該重映射只適用于100和144引腳封裝的芯片。復(fù)用功能(1)CAN_REMAP=00CAN_REMAP=10(2)CAN_REMAP=11(3)CAN1_RX或AN_RXPA11PB8PD0CAN1_TX或AN_TXPA12PB9PD16.3.5CAN2復(fù)用功能重映射在互聯(lián)型產(chǎn)品中才有CAN2接口。復(fù)用功能CAN2_REMAP=0CAN2_REMAP=1CAN_RXPB12PB5CAN_TXPB13PB66.3.6JTAG/SWD復(fù)用功能重映射JTAG/SWD是調(diào)試端口,復(fù)位默認(rèn)作為調(diào)試端口,要作為GPIO使用時,需要手動關(guān)閉JTAG或者SWD;調(diào)試接口如下:復(fù)用功能GPIO端口JTMS/SWDIOPA13JTCK/SWCLKPA14JTDIPA15JTDO/TRACESWOPB3JNTRSTPB4TRACECKPE2TRACED0PE3TRACED1PE4TRACED2PE5TRACED3PE6為了使用更多的I/O,就需要關(guān)掉JTAG,使用SWD,或者在產(chǎn)品開發(fā)結(jié)束后,要完全關(guān)掉JTAG或者SWD,就需要設(shè)置SWJ_CFG[2:0];SWJ_CFG[2:0]可能的調(diào)試端口SWJI/O引腳分配PA13/JTMS/SWDIOPA14/JTCK/SWCLKPA15/JTDIPB3/JTDO/TRACESWOPB4/NJTRST000JTAG+SWDI/O不可用I/O不可用I/O不可用I/O不可用I/O不可用001JTAG+SWD,但沒有JNTRSTI/O不可用I/O不可用I/O不可用I/O不可用I/O可用010JTAG關(guān)閉SWD啟用I/O不可用I/O不可用I/O可用I/O可用(1)I/O可用100JTAG關(guān)閉SWD關(guān)閉I/O可用I/O可用I/O可用I/O可用I/O可用其他禁用6.3.7ADC復(fù)用功能重映射此部分重映射只適用于大容量產(chǎn)品。ADC1外部觸發(fā)注入轉(zhuǎn)換復(fù)用功能重映射ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換復(fù)用功能重映射復(fù)用功能ADC1_ETRGINJ_REMAP=0ADC1_ETRGINJ_REMAP=1ADC1外部觸發(fā)注入轉(zhuǎn)換

ADC1外部觸發(fā)注入轉(zhuǎn)換與EXTI15相連ADC1外部觸發(fā)注入轉(zhuǎn)換與TIM8_CH4相連

復(fù)用功能ADC1_ETRGREG_REMAP=0ADC1_ETRGREG_REMAP=1ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換

ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換與EXTI11相連ADC1外部觸發(fā)規(guī)則轉(zhuǎn)換與TIM8_TRGO相連

ADC2外部觸發(fā)注入轉(zhuǎn)換復(fù)用功能重映射ADC2外部觸發(fā)規(guī)則轉(zhuǎn)換復(fù)用功能重映射復(fù)用功能ADC2_ETRGINJ_REMAP=0ADC2_ETRGINJ_REMAP=1ADC2外部觸發(fā)注入轉(zhuǎn)換

ADC2外部觸發(fā)注入轉(zhuǎn)換與EXTI15相連ADC2外部觸發(fā)注入轉(zhuǎn)換與TIM8_CH4相連

復(fù)用功能ADC2_ETRGREG_REMAP=0ADC2_ETRGREG_REMAP=1ADC2外部觸發(fā)規(guī)則轉(zhuǎn)換

ADC2外部觸發(fā)規(guī)則轉(zhuǎn)換與EXTI11相連ADC2外部觸發(fā)規(guī)則轉(zhuǎn)換與TIM8_TRGO相連

6.3.8定時器復(fù)用功能重映射TIM5復(fù)用功能重映像(只適用于大容量和互聯(lián)型產(chǎn)品)TIM4復(fù)用功能重映像復(fù)用功能TIM5CH4_IREMAP=0TIM5CH4_IREMAP=1TIM5_CH4TIM5的通道4連至PA3LSI內(nèi)部時鐘連至TIM5_CH4的輸入作為校準(zhǔn)使用

復(fù)用功能0TIM4_REMAP=0TIM4_REMAP=1(1)TIM4_CH1PB6PD12TIM4_CH2PB7

PD13

TIM4_CH3PB8

PD14

TIM4_CH4PB9

PD15

TIM3復(fù)用功能重映像1.只適用于64、100、144封裝復(fù)用功能TIM3_REMAP[1:0]=00TIM3_REMAP[1:0]=10TIM3_REMAP[1:0]=11(1)TIM3_CH1PA6PB4PC6TIM3_CH2

PA7PB5PC7TIM3_CH3PB0PC8TIM3_CH4PB1PC9TIM2復(fù)用功能重映像1.不適用于36腳封裝2.TIM2_CH1和TIM2_ETR共用一個引腳,但不能同時使用(因此在此使用這樣的標(biāo)記:TIM2_CH1_ETR)

復(fù)用功能TIM2_REMAP[1:0]=00TIM2_REMAP[1:0]=01TIM2_REMAP[1:0]=10TIM2_REMAP[1:0]=11(1)TIM2_CH1_ETR(2)PA0PA15

PA0PA15

TIM2_CH2PA1

PB3PA1

PB3TIM2_CH3

PA2

PB10

TIM2_CH4

PA3PB11

TIM1復(fù)用功能重映像1.只適用于100和144引腳封裝2.不適用于36引腳封裝復(fù)用功能TIM1_REMAP[1:0]=00TIM1_REMAP[1:0]=01TIM1_REMAP[1:0]=11(1)TIM1_ETRPA12PE7TIM1_CH1PA8PE9TIM1_CH2PA9PE11TIM1_CH3

PA10PE13TIM1_CH4

PA11PE14TIM1_BKINPB12(2)PA6PE15TIM1_CH1NPB13(2)PA7PE8TIM1_CH2NPB14(2)PA8PE10TIM1_CH3NPB15(2)PA9PE126.3.9USART復(fù)用功能重映射USART3重映像1.重映射只適用于64、100、144引腳2.重映射只適用于100、144引腳復(fù)用功能USART3_REMAP[1:0]=00USART3_REMAP[1:0]=01(1)USART3_REMAP[1:0]=11(2)

USART3_TXPB10PC10PD8USART3_RXPB11

PC11

PD9

USART3_CKPB12

PC12

PD10

USART3_CTSPB13

PD11

USART3_RTSPB14

PD12

USART2重映像1.重映射只適用于100、144引腳

復(fù)用功能USART2_REMAP=0USART2_REMAP=1(1)USART2_CTSPA0PD3USART2_RTSPA1

PD4

USART2_TXPA2

PD5

USART2_RXPA3

PD6

USART2_CKPA4

PD7

USART1重映像復(fù)用功能USART1_REMAP=0USART1_REMAP=1USART1_TXPA9PB6USART1_RXPA10

PB7

6.3.10I2C1復(fù)用功能重映射I2C1重映像復(fù)用功能I2C1_REMAP=0I2C1_REMAP=1(1)I2C1_SCLPB6PB8I2C1_SDAPB7

PB9

6.3.11SPI復(fù)用功能映射SPI3重映像,這個重映射只適用于互聯(lián)型產(chǎn)品。復(fù)用功能SPI3_REMAP=0SPI3_REMAP=1SPI3_NSSPA15PA4SPI3_SCKPB3PC10SPI3_MISOPB4

PC11

SPI3_MOSIPB5

PC12

SPI1重映像復(fù)用功能SPI1_REMAP=0SPI1_REMAP=1SPI1_NSSPA4PA15SPI1_SCKPA5

PB3SPI1_MISOPA6

PB4

SPI1_MOSIPA7

PB5

6.3.12以太網(wǎng)復(fù)用功能重映射ETH重映像,只適用于互聯(lián)型產(chǎn)品。復(fù)用功能ETH_REMAP=0ETH_REMAP=1RX_DV-CRS_DVPA7PD8RXD0PC4PD9

RXD1

PC5PD10

RXD2

PB0PD11

RXD3

PB1PD12

6.4重映射相關(guān)寄存器描述AFIO包括AFIO_EVCR(事件控制寄存器),AFIO_MAPR(復(fù)用重映射寄存器)和AFIO_EXTICRx(x=1...4)。在對AFIO寄存器進(jìn)行讀寫前必須使能AFIO時鐘,所以當(dāng)使用GPIO的外部中斷功能時,必須也要給AFIO提供時鐘,參考外設(shè)時鐘使能寄存器RCC_APB2ENR。6.4.1事件控制寄存器AFIO_EVCR偏移地址:0x00復(fù)位值:0x0000000031302928272625242322212019181716保留1514131211109876543210保留EVOEPORT[2:0]PIN[3:0]RWRWRWRWRWRWRWRW位31:8保留位7EVOE:允許事件輸出

該位可由軟件讀寫。當(dāng)設(shè)置該位后,Cortex的EVENTOUT將連接到由PORT[2:0]和PIN[3:0]選定的I/O口。

位6:4PORT[2:0]:端口選擇

選擇用于輸出Cortex的EVENTOUT信號的端口:

000:選擇PA

001:選擇PB

010:選擇PC

011:選擇PD

100:選擇PE位3:0PIN[3:0]:引腳選擇(x=A…E)選擇用于輸出Cortex的EVENTOUT信號的引腳:

0000:選擇Px0

0001:選擇Px1

0010:選擇Px2

0011:選擇Px30100:選擇Px4

0101:選擇Px5

0110:選擇Px6

0111:選擇Px71000:選擇Px8

1001:選擇Px9

1010:選擇Px10

1011:選擇Px111100:選擇Px12

1101:選擇Px13

1110:選擇Px14

1111:選擇Px156.4.2復(fù)用功能重映射寄存器AFIO_MAPR地址偏移:0x04復(fù)位值:0x00000000小、中、大容量芯片復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留SWJ_CFG[2:0]保留ADC2_ETRGREG_REMAPADC2_ETRGINJ_REMAPADC1_ETRGREG_REMAPADC1_ETRGINJ_REMAPTIM5CH4_IREMAPWWWRWRWRWRWRW1514131211109876543210PD01_REMAPCAN_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW互聯(lián)型芯片復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)31302928272625242322212019181716保留PTP_PPS_REMAPTIM2ITR1_REMAPSPI3_REMAP保留SWJ_CFG[2:0]MII_RMII_SELCAN2_REMAPETH_REMAP保留TIM5CH4_IREMAPRWRWRWWWWRWRWRWRW1514131211109876543210PD01_REMAPCAN1_REMAP[1:0]TIM4_REMAPTIM3_REMAP[1:0]TIM2_REMAP[1:0]TIM1_REMAP[1:0]USART3_REMAP[1:0]USART2_REMAPUSART1_REMAPI2C1_REMAPSPI1_REMAPRWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW6.4.3外部中斷配置寄存器AFIO_EXTICR1AFIO_EXTICR只是將GPIO的外部中斷引腳進(jìn)行映射,如果要配置一個I/O口的外部中斷,這個只是配置的其中一個寄存器;一個完整的外部中斷要配置三個部分:1.中斷引腳映射,也就是本部分講解的寄存器;2.設(shè)置EXTI_IMR開啟中斷,設(shè)置EXTI_FTSR或者EXTI_RTSR來設(shè)中斷的觸發(fā)方式;參考外部中斷部分。3.設(shè)置中斷的優(yōu)先級,參考NVIC寄存器部分。AFIO_EXTICR1只能設(shè)置0~3序號的引腳,因此一共需要4個這樣的寄存器才能設(shè)置0~15序號的引腳。31302928272625242322212019181716保留1514131211109876543210EXTI3[3:0]EXTI2[3:0]EXTI1[3:0]EXTI0[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=0…3)用于選擇EXTIx外部中斷的輸入源。0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

6.4.4外部中斷配置寄存器AFIO_EXTICR231302928272625242322212019181716保留1514131211109876543210EXTI7[3:0]EXTI6[3:0]EXTI5[3:0]EXTI4[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=4…7)用于選擇EXTIx外部中斷的輸入源。0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

6.4.5外部中斷配置寄存器AFIO_EXTICR331302928272625242322212019181716保留1514131211109876543210EXTI11[3:0]EXTI10[3:0]EXTI9[3:0]EXTI8[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=8…11)用于選擇EXTIx外部中斷的輸入源。0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

6.4.6外部中斷配置寄存器AFIO_EXTICR431302928272625242322212019181716保留1514131211109876543210EXTI15[3:0]EXTI14[3:0]EXTI13[3:0]EXTI12[3:0]RWRWRWRWRWRWRWRWRWRWRWRWRWRWRWRW位31:16保留位15:0EXTIx[3:0]:EXTIx配置(x=12…15)用于選擇EXTIx外部中斷的輸入源。0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

6.5GPIO庫函數(shù)GPIO_TypeDef和AFIO_TypeDef,在文件“stm32f10x_map.h”中定義如下:typedefstruct{vu32CRL;vu32CRH;vu32IDR;vu32ODR;vu32BSRR;vu32BRR;vu32LCKR;}GPIO_TypeDef;typedefstruct{vu32EVCR;vu32MAPR;vu32EXTICR[4];}AFIO_TypeDef;

主要庫函數(shù)如下:1函數(shù)GPIO_DeInit功能描述:將外設(shè)GPIOx寄存器重設(shè)為缺省值2函數(shù)GPIO_AFIODeInit功能描述:將復(fù)用功能(重映射事件控制和EXTI設(shè)置)重設(shè)為缺省值3函數(shù)GPIO_Init功能描述:根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器4函數(shù)GPIO_StructInit功能描述:把GPIO_InitStruct中的每一個參數(shù)按缺省值填入5函數(shù)GPIO_ReadInputDataBit功能描述:讀取指定端口管腳的輸入6函數(shù)GPIO_ReadInputData功能描述:讀取指定的GPIO端口輸入7函數(shù)GPIO_ReadOutputDataBit功能描述:讀取指定端

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論