GPIO的概述 2.1.1 什么是GPIO?GPIO的作用? GPIO:通用輸入輸出控制器。 GPIO的作用:芯片用來(lái)控制或采集外部器件的相關(guān)信息 2.1.2 GPIO的特征 <1>輸入狀態(tài):浮空、上拉/下拉、模擬 <2>輸出狀態(tài):推挽或開(kāi)漏 + 上拉、下拉 <3>將數(shù)據(jù)輸入到輸入數(shù)據(jù)寄存器 (GPIOx_IDR) 或外設(shè)(復(fù)用功能輸入) <4>從輸出數(shù)據(jù)寄存器 (GPIOx_ODR) 或外設(shè)(復(fù)用功能輸出)輸出數(shù)據(jù) <5>置位和復(fù)位寄存器 (GPIOx_BSRR),對(duì) GPIOx_ODR 具有按位寫(xiě)權(quán)限 <6>模擬功能 <7>復(fù)用功能輸入 /輸出選擇寄存器(一個(gè) I/O 最多可具有 16 個(gè)復(fù)用功能) <8>輸入數(shù)據(jù)寄存器 (GPIOx_IDR) 每隔 1 個(gè) AHB1 時(shí)鐘周期捕獲一次 I/O 引腳的數(shù)據(jù)。 <9>所有 GPIO 引腳都具有內(nèi)部弱上拉及下拉電阻,可根據(jù) GPIOx_PUPDR 寄存器中的值來(lái)打開(kāi) /關(guān)閉。 2.1.3 GPIO 功能描述 - 輸入浮空
- 輸入上拉
- 輸入下拉
- 模擬功能
- 具有上拉或下拉功能的開(kāi)漏輸出
- 具有上拉或下拉功能的推挽輸出
- 具有上拉或下拉功能的復(fù)用功能推挽
8) 具有上拉或下拉功能的復(fù)用功能開(kāi)漏 注意:每個(gè) I/O 端口位均可自由編程,但 I/O 端口寄存器必須按 32 位字、半字或字節(jié)進(jìn)行訪問(wèn) 2.1.4 5V容忍原理 

2.1.5 I/O 引腳復(fù)用器和映射 微控制器 I/O 引腳通過(guò)一個(gè)復(fù)用器連接到板載外設(shè) /模塊,該復(fù)用器一次僅允許一個(gè)外設(shè)的復(fù)用功能 (AF) 連接到 I/O 引腳 

<1>完成復(fù)位后,所有 I/O 都會(huì)連接到系統(tǒng)的復(fù)用功能 0 (AF0)。 <2>外設(shè)的復(fù)用功能映射到 AF1 至 AF13。 <3>Cortex?-M4F EVENTOUT 映射到 AF15 2.2 GPIO的框架 2.2.1 輸入配置 
● 輸出緩沖器被關(guān)閉 ● 施密特觸發(fā)器輸入被打開(kāi) ● 根據(jù) GPIOx_PUPDR 寄存器中的值決定是否打開(kāi)上拉和下拉電阻 ● 輸入數(shù)據(jù)寄存器每隔 1 個(gè) AHB1 時(shí)鐘周期對(duì) I/O 引腳上的數(shù)據(jù)進(jìn)行一次采樣 ● 對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可獲取 I/O 狀態(tài) 2.2.2 輸出配置  


● 輸出緩沖器被打開(kāi): 開(kāi)漏模式:輸出寄存器中的“0”可激活 N-MOS,而輸出寄存器中的“1 ”會(huì)使端口保持高組態(tài) (Hi-Z)( P-MOS 始終不激活)。 推挽模式:輸出寄存器中的“0”可激活 N-MOS,而輸出寄存器中的“1 ”可激活P-MOS。 ● 施密特觸發(fā)器輸入被打開(kāi) ● 根據(jù) GPIOx_PUPDR 寄存器中的值決定是否打開(kāi)弱上拉電阻和下拉電阻 ● 輸入數(shù)據(jù)寄存器每隔 1 個(gè) AHB1 時(shí)鐘周期對(duì) I/O 引腳上的數(shù)據(jù)進(jìn)行一次采樣 ● 對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可獲取 I/O 狀態(tài) ●對(duì)輸出數(shù)據(jù)寄存器的讀訪問(wèn)可獲取最后的寫(xiě)入值 2.2.3 復(fù)用功能 
● 可將輸出緩沖器配置為開(kāi)漏或推挽 ● 輸出緩沖器由來(lái)自外設(shè)的信號(hào)驅(qū)動(dòng)(發(fā)送器使能和數(shù)據(jù)) ● 施密特觸發(fā)器輸入被打開(kāi) ● 根據(jù) GPIOx_PUPDR 寄存器中的值決定是否打開(kāi)弱上拉電阻和下拉電阻 ● 輸入數(shù)據(jù)寄存器每隔 1 個(gè) AHB1 時(shí)鐘周期對(duì) I/O 引腳上的數(shù)據(jù)進(jìn)行一次采樣 ● 對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)可獲取 I/O 狀態(tài) 復(fù)用與通用的對(duì)比: 
2.2.4 模擬功能 
● 輸出緩沖器被禁止。 ● 施密特觸發(fā)器輸入停用, I/O 引腳的每個(gè)模擬輸入的功耗變?yōu)榱恪J┟芴赜|發(fā)器的輸出被 強(qiáng)制處理為恒定值 (0)。 ● 弱上拉和下拉電阻被關(guān)閉。 ● 對(duì)輸入數(shù)據(jù)寄存器的讀訪問(wèn)值為“0”。 2.3 GPIO相關(guān)寄存器 2.3.1 GPIO寄存器 每個(gè)IO口有10個(gè)寄存器控制 4 個(gè) 32 位配置寄存器 GPIOx_MODER GPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUPDR 2 個(gè) 32 位數(shù)據(jù)寄存器 GPIOx_IDR GPIOx_ODR 1 個(gè) 32 位置位 /復(fù)位寄存器 GPIOx_BSRR 1 個(gè) 32 位鎖定寄存器 GPIOx_LCKR 2 個(gè) 32 位復(fù)用功能選擇寄存器 GPIOx_AFRL GPIOx_AFRH 2.3.2 寄存器相關(guān)縮寫(xiě)  2.4 軟件設(shè)計(jì) 2.4.1 LED燈 1.開(kāi)時(shí)鐘 2.初始化GPIO 3.點(diǎn)亮燈 2.4.2 蜂鳴器 1.開(kāi)時(shí)鐘 2.初始化GPIO 3.開(kāi)啟蜂鳴器 2.4.3 按鍵 1.開(kāi)時(shí)鐘 2.初始化GPIO 3.按鍵識(shí)別 延時(shí)消抖 松手檢測(cè) 2.5 補(bǔ)充 2.5.1 IO口與端口 GPIO口以分組形式存在,每組(端口)有16個(gè)IO口。 I/O口:某個(gè)具體引腳 端口:16個(gè)I/O口組成 2.5.2 變量與寄存器的異同 相同點(diǎn): 變量與寄存器都向內(nèi)存申請(qǐng)空間,可以存儲(chǔ)數(shù)據(jù),都有相應(yīng)地址。 不同點(diǎn): 變量地址隨時(shí)變化,寄存器地址永遠(yuǎn)固定; 變量可以存儲(chǔ)浮點(diǎn)類型數(shù)據(jù),寄存器不能存儲(chǔ)浮點(diǎn)類型數(shù)據(jù)。 2.5.3 各類電平 CMOS電平: 3.3V 邏輯1 0.0V 邏輯0 TTL電平: 5.0V 邏輯1 0.0V 邏輯0 485/232電平: -15V~-3V 邏輯1 3V~15V 邏輯0 差分信號(hào): 定義:有兩條線,通過(guò)兩條線的電壓差作為邏輯0/1。 好處:傳輸距離很遠(yuǎn)。衰減一致,保證邏輯。 2.5.4 問(wèn)答 <1>為什么使用模塊化編程? 1.降低代碼冗余度,提高代碼的利用率 2.便于閱讀和維護(hù) <2>為什么使用條件編譯? 1.為了使代碼更加靈活 <3>頭文件使用條件編譯的作用? <4>注釋的作用? <5>頭文件一般有什么東西? <6>按鍵按下為什么要延時(shí)消抖? 按鍵按下瞬間,按鍵從一個(gè)穩(wěn)定狀態(tài)變化到另一個(gè)穩(wěn)定狀態(tài)之間,有一個(gè)不穩(wěn)定的過(guò)程,延時(shí)是為了越過(guò)不穩(wěn)定狀態(tài)存在的時(shí)間,一般為10ms 
<7>按鍵如何保持一次性? 松手檢測(cè):設(shè)置一個(gè)靜態(tài)標(biāo)志位,用于松手檢測(cè)。 <8>知識(shí)領(lǐng)悟 寄存器是編程人員的編程接口,對(duì)于MCU而言,不管你如何封裝,一切配置,終究歸于寄存器配置;而操作寄存器的本質(zhì)是對(duì)操作地址。
以上的Word格式文檔51黑下載地址:
2.STM32-GPIO.docx
(1.5 MB, 下載次數(shù): 15)
2020-6-18 17:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|