GPIO的概述
2.1.1 什么是GPIO?GPIO的作用?
GPIO:通用輸入輸出控制器。
GPIO的作用:芯片用來控制或采集外部器件的相關信息
2.1.2 GPIO的特征
<1>輸入狀態:浮空、上拉/下拉、模擬
<2>輸出狀態:推挽或開漏 + 上拉、下拉
<3>將數據輸入到輸入數據寄存器 (GPIOx_IDR) 或外設(復用功能輸入)
<4>從輸出數據寄存器 (GPIOx_ODR) 或外設(復用功能輸出)輸出數據
<5>置位和復位寄存器 (GPIOx_BSRR),對 GPIOx_ODR 具有按位寫權限
<6>模擬功能
<7>復用功能輸入 /輸出選擇寄存器(一個 I/O 最多可具有 16 個復用功能)
<8>輸入數據寄存器 (GPIOx_IDR) 每隔 1 個 AHB1 時鐘周期捕獲一次 I/O 引腳的數據。
<9>所有 GPIO 引腳都具有內部弱上拉及下拉電阻,可根據 GPIOx_PUPDR 寄存器中的值來打開 /關閉。
2.1.3 GPIO 功能描述
8) 具有上拉或下拉功能的復用功能開漏
注意:每個 I/O 端口位均可自由編程,但 I/O 端口寄存器必須按 32 位字、半字或字節進行訪問
2.1.4 5V容忍原理
2.1.5 I/O 引腳復用器和映射
微控制器 I/O 引腳通過一個復用器連接到板載外設 /模塊,該復用器一次僅允許一個外設的復用功能 (AF) 連接到 I/O 引腳
<1>完成復位后,所有 I/O 都會連接到系統的復用功能 0 (AF0)。
<2>外設的復用功能映射到 AF1 至 AF13。
<3>Cortex?-M4F EVENTOUT 映射到 AF15
2.2 GPIO的框架
2.2.1 輸入配置
● 輸出緩沖器被關閉
● 施密特觸發器輸入被打開
● 根據 GPIOx_PUPDR 寄存器中的值決定是否打開上拉和下拉電阻
● 輸入數據寄存器每隔 1 個 AHB1 時鐘周期對 I/O 引腳上的數據進行一次采樣
● 對輸入數據寄存器的讀訪問可獲取 I/O 狀態
2.2.2 輸出配置
● 輸出緩沖器被打開:
開漏模式:輸出寄存器中的“0”可激活 N-MOS,而輸出寄存器中的“1 ”會使端口保持高組態 (Hi-Z)( P-MOS 始終不激活)。
推挽模式:輸出寄存器中的“0”可激活 N-MOS,而輸出寄存器中的“1 ”可激活P-MOS。
● 施密特觸發器輸入被打開
● 根據 GPIOx_PUPDR 寄存器中的值決定是否打開弱上拉電阻和下拉電阻
● 輸入數據寄存器每隔 1 個 AHB1 時鐘周期對 I/O 引腳上的數據進行一次采樣
● 對輸入數據寄存器的讀訪問可獲取 I/O 狀態
●對輸出數據寄存器的讀訪問可獲取最后的寫入值
2.2.3 復用功能
● 可將輸出緩沖器配置為開漏或推挽
● 輸出緩沖器由來自外設的信號驅動(發送器使能和數據)
● 施密特觸發器輸入被打開
● 根據 GPIOx_PUPDR 寄存器中的值決定是否打開弱上拉電阻和下拉電阻
● 輸入數據寄存器每隔 1 個 AHB1 時鐘周期對 I/O 引腳上的數據進行一次采樣
● 對輸入數據寄存器的讀訪問可獲取 I/O 狀態
復用與通用的對比:
2.2.4 模擬功能
● 輸出緩沖器被禁止。
● 施密特觸發器輸入停用, I/O 引腳的每個模擬輸入的功耗變為零。施密特觸發器的輸出被
強制處理為恒定值 (0)。
● 弱上拉和下拉電阻被關閉。
● 對輸入數據寄存器的讀訪問值為“0”。
2.3 GPIO相關寄存器
2.3.1 GPIO寄存器
每個IO口有10個寄存器控制
4 個 32 位配置寄存器
GPIOx_MODER
GPIOx_OTYPER
GPIOx_OSPEEDR
GPIOx_PUPDR
2 個 32 位數據寄存器
GPIOx_IDR
GPIOx_ODR
1 個 32 位置位 /復位寄存器
GPIOx_BSRR
1 個 32 位鎖定寄存器
GPIOx_LCKR
2 個 32 位復用功能選擇寄存器
GPIOx_AFRL
GPIOx_AFRH
2.3.2 寄存器相關縮寫
2.4 軟件設計
2.4.1 LED燈
1.開時鐘
2.初始化GPIO
3.點亮燈
2.4.2 蜂鳴器
1.開時鐘
2.初始化GPIO
3.開啟蜂鳴器
2.4.3 按鍵
1.開時鐘
2.初始化GPIO
3.按鍵識別
延時消抖
松手檢測
2.5 補充
2.5.1 IO口與端口
GPIO口以分組形式存在,每組(端口)有16個IO口。
I/O口:某個具體引腳
端口:16個I/O口組成
2.5.2 變量與寄存器的異同
相同點:
變量與寄存器都向內存申請空間,可以存儲數據,都有相應地址。
不同點:
變量地址隨時變化,寄存器地址永遠固定;
變量可以存儲浮點類型數據,寄存器不能存儲浮點類型數據。
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
差分信號:
定義:有兩條線,通過兩條線的電壓差作為邏輯0/1。
好處:傳輸距離很遠。衰減一致,保證邏輯。
2.5.4 問答
<1>為什么使用模塊化編程?
1.降低代碼冗余度,提高代碼的利用率
2.便于閱讀和維護
<2>為什么使用條件編譯?
1.為了使代碼更加靈活
<3>頭文件使用條件編譯的作用?
<4>注釋的作用?
<5>頭文件一般有什么東西?
<6>按鍵按下為什么要延時消抖?
按鍵按下瞬間,按鍵從一個穩定狀態變化到另一個穩定狀態之間,有一個不穩定的過程,延時是為了越過不穩定狀態存在的時間,一般為10ms
<7>按鍵如何保持一次性?
松手檢測:設置一個靜態標志位,用于松手檢測。
<8>知識領悟
寄存器是編程人員的編程接口,對于MCU而言,不管你如何封裝,一切配置,終究歸于寄存器配置;而操作寄存器的本質是對操作地址。
以上的Word格式文檔51黑下載地址:
2.STM32-GPIO.docx
(1.5 MB, 下載次數: 15)
peterliuh 發表于 2020-6-19 00:17
好東西,非常想要
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |