




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、IO口的復(fù)用最近在學(xué)習(xí)STM32,在BZ上一篇關(guān)于的串口通信文章里有這么一段代碼:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);當(dāng)初是參考開(kāi)發(fā)的例子寫的,一直對(duì)GPIOD或上“RCC_APB2Periph_AFIO”這句話的意思沒(méi)搞懂,通過(guò)這幾天在網(wǎng)上查找資料和看手冊(cè),終于高清楚了,不敢獨(dú)享,希望能對(duì)跟我一樣的新手有所幫助吧o(_)o.一、STM32上有很多I/O口,也有很多的內(nèi)置外設(shè),像I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就是
2、I/O管腳的復(fù)用功能。但是STM32還有一特別之處就是:很多內(nèi)置外設(shè)的I/O復(fù)用引腳可以通過(guò)重映射功能,從不同的I/O管腳引出,即使用了復(fù)用功能的引腳是可通過(guò)程序改變的。知道了這些我們就不難理解上面代碼的意思了,程序中用到的USART2外設(shè)的TX,RX分別對(duì)應(yīng)PA2,PA3,但是我的學(xué)習(xí)板上的PA2,PA3引腳接了其他設(shè)備,但是為了還要用USART2,“RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO”就打開(kāi)了GPIOD重映射功能,把USART2設(shè)備的TX,RX映射到PD5,PD6上,我們?cè)谶@兩個(gè)引腳上接上MAX232串口芯片就可以使用USART2串口通信了。
3、那各位看官該問(wèn):“USART2是不是可以映射到任意管腳呢?”答案是否定的,它只能映射到固定的管腳,下圖是USART2重映射表其他外設(shè)的重映射可以參考STM32100X手冊(cè)。二、為了節(jié)省IO資源單片機(jī)會(huì)在一個(gè)IO上復(fù)用很多功能,一般來(lái)說(shuō),單片機(jī)IO口用到了一個(gè)功能后就能再用另外的復(fù)用功能(對(duì)應(yīng)的外設(shè))了,這就體現(xiàn)出了STM32 GPIO的強(qiáng)大了,我們用重映射的方法把其中一個(gè)外設(shè)映射到其他IO腳上,這樣就可以充分利用片內(nèi)資源!也許你以為IO和AFIO是很簡(jiǎn)單的,事實(shí)上有幾個(gè)誤區(qū)可能很多人都沒(méi)注意過(guò),當(dāng)你只用現(xiàn)成的開(kāi)發(fā)板來(lái)學(xué)習(xí)的時(shí)候,別人已經(jīng)幫你做好了資源分配,所有的外設(shè)功能學(xué)習(xí)都是照著別人給你的例
4、程去做的,這才沒(méi)讓你覺(jué)得奇怪。先問(wèn)自己一個(gè)問(wèn)題:STM32中,USART2和TIM2是共用相同IO的,你如何決定這幾個(gè)IO到底是做USART2還是做TIM2呢?如果你要同時(shí)使用USART2和TIM2,該怎么辦?1、不是說(shuō)使用了IO的復(fù)用功能就一定要啟動(dòng)RCC_APB2Periph_AFIO的Clock的,參考下圖只有使用了AFIO的事件控制寄存器(AFIO_EVCR)、AFIO的重映射功能(AFIO_MAPR)以及外部中斷(AFIO_EXTICRx)控制寄存器才需要開(kāi)啟AFIO的時(shí)鐘,STM32參考手冊(cè)從來(lái)沒(méi)說(shuō)過(guò)使用IO的復(fù)用功能就一定要開(kāi)啟AFIO時(shí)鐘,這是個(gè)誤區(qū)。例如下面的,最常用的USA
5、RT1,如果你的板子上,默認(rèn)用的就是PA9和PA10這兩個(gè)IO作為USART1的TX和RX,那么也就是沒(méi)有重映射(No Remap)這種情況下根本不需要開(kāi)啟AFIO時(shí)鐘,只要開(kāi)啟USART1的外設(shè)時(shí)鐘就行了。這個(gè)實(shí)驗(yàn)很簡(jiǎn)單,自己試試就知道了。2、從下面的圖你可以看到,原來(lái)USART1是可以放在PB6和PB7上面的,只不過(guò)幾乎所有的原理圖封裝中都不會(huì)在PB6和PB7的復(fù)用功能上標(biāo)出它可以當(dāng)USART1用,畢竟這種重映射的情況太多,幾乎所有外設(shè)都可以重映射,每個(gè)都標(biāo)出來(lái)會(huì)非?;靵y。STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1CH4都在PA0PA3上面,具體要如何選擇這兩
6、個(gè)功能呢?如果要使用USART2,就要使能USART2的外設(shè)時(shí)鐘,同理,如果要使用TIM2,就開(kāi)啟TIM2的外設(shè)時(shí)鐘,如果你同時(shí)開(kāi)啟,我也不知道會(huì)怎么樣,你可以自己試試,我覺(jué)得應(yīng)該是兩個(gè)都不能用。如果你一定要在PA0PA3上使用這兩個(gè)功能,只能是時(shí)分復(fù)用。正確的同時(shí)使用USART2和TIM2,應(yīng)該是使用上面提到的AFIO_Remap寄存器,將其中的一個(gè)重映射到其他IO上去,當(dāng)然這樣其他IO的本身的復(fù)用功能你就不能開(kāi)啟了?;氐角懊娴膯?wèn)題,如果你不做重映射(Remap),你根本不可能同時(shí)在PA0PA3上同時(shí)使用這兩個(gè)外設(shè),現(xiàn)在你的方案有兩種:一、保留USART2在PA口上,將TIM2完全重映射(F
7、ull Remap)到其他IO上,或者,如果你不用RTS和CTS的硬件流控制,PA0(CTS)和PA1(RTS)上對(duì)應(yīng)的CH1和CH2是可以不用重映射的,只需要將Bit9:8改成10,也就是將CH3和CH4部分重映射到PB10和PB11上去,而CH1和CH2繼續(xù)保留在PA0和PA1上。但這種情況下,PB10和PB11上的I2C2和USART3就不能用了。二、保留TIM2在PA口,將USART2重映射到PD口上,很明顯,當(dāng)TIM2完全不重映射時(shí),USART2所需的信號(hào)線只有時(shí)鐘信號(hào)Clock不受影響,這種情況下也沒(méi)有部分映射可言了,必須將USART2完全重映射到PD3PD7上,同樣的,這種情況下
8、FSMC就不能用了(被USART2占用)。三、 STM32上有很多I/O口,也有很多的內(nèi)置外設(shè)想I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就是I/O管腳的復(fù)用功能。但是STM32還有一特別之處就是:很多復(fù)用內(nèi)置的外設(shè)的I/O引腳可以通過(guò)重映射功能,從不同的I/O管腳引出,即復(fù)用功能的引腳是可通過(guò)程序改變的.讀到這里相信大家都應(yīng)該了解了端口重映射的一些概念了.原理上的東西不細(xì)說(shuō)了,大家可以看手冊(cè)或者網(wǎng)上查,這方面的資料還是很多的.下面說(shuō)說(shuō)我的調(diào)試經(jīng)歷. 上面說(shuō)過(guò),我用的IC是STM32F103VCT6 ,說(shuō)到這兒跟大家提一個(gè)小插曲.當(dāng)時(shí)
9、在老板讓我換方案也就是換IC時(shí),只說(shuō)用VC的CPU,讓我把要買的CPU告訴負(fù)責(zé)買器件的人,由于我是第一次做,所以傻乎乎的寫了張紙給了對(duì)方.內(nèi)容是STM32F103VC 10PCS對(duì)方看了一眼就給我退了回來(lái)并加一句型號(hào)不對(duì),沒(méi)寫全.我沒(méi)明白,便也不好繼續(xù)問(wèn)白癡問(wèn)題,所以跑網(wǎng)上查,原來(lái)光這個(gè)IC就不止一種.我們選用的是T6也就是LQFP封裝的 工作環(huán)境為-40C - 80C.所以說(shuō)大家以后小心點(diǎn)兒 .言規(guī)正傳.不知道是什么原因 PCB制圖時(shí)把串口接到USART1上了,當(dāng)時(shí)也沒(méi)在意,等我把USART測(cè)試程序?qū)懞脽M(jìn)去硬件仿真時(shí),串口給的是亂碼,我當(dāng)時(shí)就覺(jué)得奇怪.把程序檢查了好幾遍就是查不出問(wèn)題來(lái),以
10、為是硬件有問(wèn)題,但突然想到了STM有復(fù)用功能,心想會(huì)不會(huì)是這里有鬼?于是找來(lái)datasheet 一看 ,真相大白:三個(gè)紅框交匯處.STM32F103VCT6 這個(gè)CPU的USART1接的是PB6/PB7, 但是上電初始化后 默認(rèn)功能并非是USART1.所以想要用串口功能 .必須用端口重映射. 大家知道,STM32的單片機(jī)每個(gè)功能模塊有自己的時(shí)鐘系統(tǒng),所以要想要調(diào)用STM32單片機(jī)的功能模塊時(shí) 必須先配置對(duì)應(yīng)時(shí)鐘,然后才能去操作相應(yīng)的功能模塊.端口重映射也一樣.如圖示:重映射步驟為:1.打開(kāi)重映射時(shí)鐘和USART重映射后的I/O口引腳時(shí)鐘,RCC_APB2PeriphClockCmd(RCC_A
11、PB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); /使能對(duì)應(yīng)IO口的時(shí)鐘,因?yàn)槭菑?fù)用功能所以還要使能AFIO時(shí)鐘2.I/O口重映射開(kāi)啟. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);3.配制重映射后的引腳:這里只需配置重映射后的I/O(PB6,PB7),原來(lái)的不需要去配置(PA9,PA10).GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.
12、GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);只需要這三步,串口就可以正常使用了,簡(jiǎn)單吧? 但是我糾結(jié)了大半個(gè)小時(shí)才搞定的,好多事情都是說(shuō)起來(lái)容易做起來(lái)難的,希望我以后多多進(jìn)步.不要眼高手低,嗯 我正朝這個(gè)方向前進(jìn)補(bǔ)充:1. AFIO的功能為了優(yōu)化64腳或100腳封裝的外設(shè)數(shù)目,可以把一些復(fù)用功能重新映射到其他引腳上。設(shè)置復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)實(shí)現(xiàn)引腳的重新映射。這時(shí),復(fù)用功能不再映射到它們的原始分配上。簡(jiǎn)言之,AFIO實(shí)現(xiàn)了復(fù)用功能的重新映射。2.在什么情況下,需要開(kāi)啟AFIO時(shí)鐘?下圖, 參考手冊(cè)中寫道:對(duì)寄存器AFIO_EVCR, AFIO_MAPR和AFIO_EXTICRX進(jìn)行讀寫操作前,應(yīng)當(dāng)首先打開(kāi)AFIO的時(shí)鐘。在數(shù)據(jù)手冊(cè)的引腳定義中(pin definitions),復(fù)用功能Alternate
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第二單元 我和大自然 測(cè)試2023-2024學(xué)年一年級(jí)下冊(cè)道德與法治同步教學(xué)設(shè)計(jì)(統(tǒng)編版)
- 第三單元第10課 秦末農(nóng)民大起義2023-2024學(xué)年七年級(jí)上冊(cè)歷史同步教學(xué)設(shè)計(jì)(部編版)
- 機(jī)器學(xué)習(xí)原理與應(yīng)用課件 第13章 集成學(xué)習(xí)
- 2025年廣西質(zhì)量工程職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)新版
- 13 我想和你們一起玩(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治 一年級(jí)下冊(cè)
- 2025至2030年中國(guó)抱壓式液壓閥門測(cè)試機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 商業(yè)計(jì)劃書中的財(cái)務(wù)分析
- 商務(wù)合作保密協(xié)議范本(2篇)
- 陜西省渭南市2022版八年級(jí)下學(xué)期物理期末考試試卷D卷
- 2025至2030年中國(guó)床榻數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- DZ∕T 0289-2015 區(qū)域生態(tài)地球化學(xué)評(píng)價(jià)規(guī)范(正式版)
- 2020年5月天津高考英語(yǔ)聽(tīng)力試題-(試題+MP3+答案)-
- DB32T 4400-2022《飲用水次氯酸鈉消毒技術(shù)規(guī)程》
- 學(xué)校校園禁煙處罰管理方案
- 少兒美術(shù)教育知識(shí)講座
- 外科學(xué)教學(xué)課件:頸、腰椎退行性疾病
- 2023-2024屆高考語(yǔ)文復(fù)習(xí)小說(shuō)訓(xùn)練(含答案)-孫犁《風(fēng)云初記》
- 天耀中華合唱簡(jiǎn)譜大劇院版
- 中醫(yī)培訓(xùn)課件:《拔罐技術(shù)》
- 取節(jié)育環(huán)之后的護(hù)理
- 2023年12月東莞市樟木頭鎮(zhèn)下屬事業(yè)單位2024年公開(kāi)招考4名特聘工程師筆試歷年高頻考題(難、易錯(cuò)點(diǎn)薈萃)答案帶詳解附后
評(píng)論
0/150
提交評(píng)論