HK32F103x/C/D/E是航順芯片推出的中大容量的103系列芯片,而作為32位MCU最常用功能就是GPIO。HK32F103x的每個(gè)GPI/O端口有兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR 和 GPIOx_ODR),一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。
每個(gè)I/O端口的特定硬件特征,GPIO端口的每個(gè)位可以由軟件分別配置成多種模式。
輸入浮空
輸入上拉
輸入下拉
模擬輸入
開漏輸出
推挽式輸出
推挽式復(fù)用功能
開漏復(fù)用功能
每個(gè)I/O端口位可以自由編程,然而必須按照32位字訪問I/O端口寄存器(不允許半字或字節(jié)訪問)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允許對(duì)任何GPIO寄存器進(jìn)行讀/更改的獨(dú)立訪問;這樣,在讀和更改訪問之間產(chǎn)生IRQ時(shí)不會(huì)發(fā)生危險(xiǎn)。每個(gè)GPIO管腳都可以由軟件配置成輸出(推拉或開路)、輸入(帶或不帶上拉或下拉)或其它的外設(shè)功能端口。多數(shù) GPIO 管腳都與數(shù)字或模擬的外設(shè)共用。所有的 GPIO 管腳都有大電流通過能力。在需要的情況下,I/O 管腳的外設(shè)功能可以通過一個(gè)特定的操作鎖定,以避免意外的寫入 I/O 寄存器。
下圖就是I/O 端口位的基本結(jié)構(gòu):
5伏兼容 I/O 端口位的基本結(jié)構(gòu)
注意:VDD_FT 對(duì)5伏容忍I/O腳是特殊的,它與VDD不同
端口位配置表
輸出模式位
單獨(dú)的位設(shè)置或位清除
當(dāng)對(duì)GPIOx_ODR的個(gè)別位編程時(shí),軟件不需要禁止中斷:在單次APB2寫操作里,可以只更改一個(gè)或多個(gè)位。這是通過對(duì)“置位/復(fù)位寄存器”(GPIOx_BSRR,復(fù)位是 GPIOx_BRR)中想要更改的位寫’1’來實(shí)現(xiàn)的。沒被選擇的位將不被更改。
復(fù)用功能(AF)
使用默認(rèn)復(fù)用功能前必須對(duì)端口位配置寄存器編程。
● 對(duì)于復(fù)用的輸入功能,端口必須配置成輸入模式(浮空、上拉或下拉)且輸入引腳必須由外部驅(qū)動(dòng)
注意:也可以通過軟件來模擬復(fù)用功能輸入引腳,這種模擬可以通過對(duì) GPIO 控制器編程來實(shí)現(xiàn)。此時(shí),端口應(yīng)當(dāng)被設(shè)置為復(fù)用功能輸出模式。顯然,這時(shí)相應(yīng)的引腳不再由外部驅(qū)動(dòng),而是通過 GPIO 控制器由軟件來驅(qū)動(dòng)。
● 對(duì)于復(fù)用輸出功能,端口必須配置成復(fù)用功能輸出模式(推挽或開漏)。
● 對(duì)于雙向復(fù)用功能,端口位必須配置復(fù)用功能輸出模式(推挽或開漏)。這時(shí),輸入驅(qū)動(dòng)器被配置成浮空輸入模式。
如果把端口配置成復(fù)用輸出功能,則引腳和輸出寄存器斷開,并和片上外設(shè)的輸出信號(hào)連接。如果軟件把一個(gè)GPIO腳配置成復(fù)用輸出功能,但是外設(shè)沒有被激活,它的輸出將不確定。
輸入配置
當(dāng) I/O 端口配置為輸入時(shí):
● 輸出緩沖器被禁止
● 施密特觸發(fā)輸入被激活
● 根據(jù)輸入配置(上拉,下拉或浮動(dòng))的不同,弱上拉和下拉電阻被連接
● 出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
● 對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)
輸出配置
當(dāng) I/O 端口被配置為輸出時(shí):
● 輸出緩沖器被激活
─ 開漏模式:輸出寄存器上的’0’激活 N-MOS,而輸出寄存器上的’1’將端口置于高阻狀態(tài)(P-MOS 從不被激活)。
─ 推挽模式:輸出寄存器上的’0’激活 N-MOS,而輸出寄存器上的’1’將激活 P-MOS。
● 施密特觸發(fā)輸入被激活
● 弱上拉和下拉電阻被禁止
● 出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器
● 在開漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)
● 在推挽式模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值。
復(fù)用功能配置
當(dāng) I/O 端口被配置為復(fù)用功能時(shí):
● 在開漏或推挽式配置中,輸出緩沖器被打開
● 內(nèi)置外設(shè)的信號(hào)驅(qū)動(dòng)輸出緩沖器(復(fù)用功能輸出)
● 施密特觸發(fā)輸入被激活
● 弱上拉和下拉電阻被禁止
● 在每個(gè)APB2時(shí)鐘周期,出現(xiàn)在I/O腳上的數(shù)據(jù)被采樣到輸入數(shù)據(jù)寄存器
● 開漏模式時(shí),讀輸入數(shù)據(jù)寄存器時(shí)可得到I/O口狀態(tài)
● 在推挽模式時(shí),讀輸出數(shù)據(jù)寄存器時(shí)可得到最后一次寫的值
模擬輸入配置
當(dāng) I/O 端口被配置為模擬輸入配置時(shí):
● 輸出緩沖器被禁止
● 禁止施密特觸發(fā)輸入,實(shí)現(xiàn)了每個(gè)模擬I/O引腳上的零消耗。施密特觸發(fā)輸出值被強(qiáng)置為’0’
● 弱上拉和下拉電阻被禁止
● 讀取輸入數(shù)據(jù)寄存器時(shí)數(shù)值為’0’
下面就HK32F103xC/D/E在操作上需要應(yīng)用開發(fā)者注意的。
用戶在使用HK32F103xC/D/E時(shí),使用軟件循環(huán)產(chǎn)生定時(shí),用GPIO翻轉(zhuǎn)模擬時(shí)序,發(fā)現(xiàn)跟友商不一致。這是我們?cè)O(shè)計(jì)跟友商不一樣。
解決方法如下:
不開 Cache,HK32F103xCxDxE 效率低一點(diǎn)。
打開 Cache,HK32F103xCxDxE 效率明顯提高。
以上有關(guān)寄存器的介紹可以參考我們HK的HK32F103xC/D/E的應(yīng)用手冊(cè)。
來源:航順芯片
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
16885瀏覽量
349916 -
GPIO
+關(guān)注
關(guān)注
16文章
1188瀏覽量
51832 -
航順芯片
+關(guān)注
關(guān)注
1文章
102瀏覽量
22769
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論