【STM32】GPIO概述
00. 目錄
文章目錄
- 00. 目錄
- 01. GPIO簡介
- 02. GPIO主要特性
- 03. GPIO功能描述
- 04. I/O引腳復用器和映射
- 05. I/O端口控制寄存器
- 06. I/O端口數據寄存器
- 07. I/O數據位操作
- 08. GPIO鎖定機制
- 09. GPIO寄存器描述
- 9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A..I)
- 9.2 GPIO端口輸出類型寄存器 (GPIOx_OTYPER) (x = A..I)
- 9.3 GPIO端口輸出速度寄存器 (GPIOx_OSPEEDR) (x = A..I/)
- 9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I/)
- 9.5 GPIO端口輸入數據寄存器 (GPIOx_IDR) (x = A..I)
- 9.6 GPIO端口輸出數據寄存器 (GPIOx_ODR) (x = A..I)
- 9.7 GPIO端口置位/復位寄存器 (GPIOx_BSRR) (x = A..I)
- 9.8 GPIO復用功能低位寄存器 (GPIOx_AFRL) (x = A..I)
- 9.9 GPIO復用功能高位寄存器 (GPIOx_AFRH) (x = A..I)
- 10. 附錄
01. GPIO簡介
每個通用 I/O 端口包括 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_AFRH 和 GPIOx_AFRL)。
02. GPIO主要特性
● 受控 I/O 多達 16 個
● 輸出狀態:推挽或開漏 + 上拉/下拉
● 從輸出數據寄存器 (GPIOx_ODR) 或外設(復用功能輸出)輸出數據
● 可為每個 I/O 選擇不同的速度
● 輸入狀態:浮空、上拉/下拉、模擬
● 將數據輸入到輸入數據寄存器 (GPIOx_IDR) 或外設(復用功能輸入)
● 置位和復位寄存器 (GPIOx_BSRR),對 GPIOx_ODR 具有按位寫權限
● 鎖定機制 (GPIOx_LCKR),可凍結 I/O 配置
● 模擬功能
● 復用功能輸入/輸出選擇寄存器(一個 I/O 最多可具有 16 個復用功能)
● 快速翻轉,每次翻轉最快只需要兩個時鐘周期
● 引腳復用非常靈活,允許將 I/O 引腳用作 GPIO 或多種外設功能中的一種
03. GPIO功能描述
根據數據手冊中列出的每個 I/O 端口的特性,可通過軟件將通用 I/O (GPIO) 端口的各個端口位分別配置為多種模式:
● 輸入浮空
● 輸入上拉
● 輸入下拉
● 模擬功能
● 具有上拉或下拉功能的開漏輸出
● 具有上拉或下拉功能的推挽輸出
● 具有上拉或下拉功能的復用功能推挽
● 具有上拉或下拉功能的復用功能開漏
04. I/O引腳復用器和映射
微控制器 I/O 引腳通過一個復用器連接到板載外設/模塊,該復用器一次僅允許一個外設的復用功能 (AF) 連接到 I/O 引腳。這可以確保共用同一個 I/O 引腳的外設之間不會發生沖突。
每個 I/O 引腳都有一個復用器,該復用器采用 16 路復用功能輸入(AF0 到 AF15),可通過GPIOx_AFRL(針對引腳 0 到 7)和 GPIOx_AFRH(針對引腳 8 到 15)寄存器對這些輸入進行配置。
● 完成復位后,所有 I/O 都會連接到系統的復用功能 0 (AF0)。
● 外設的復用功能映射到 AF1 至 AF13。
● Cortex?-M4F EVENTOUT 映射到 AF15。
05. I/O端口控制寄存器
每個 GPIO 有 4 個 32 位存儲器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多達 16 個 I/O。
GPIOx_MODER 寄存器用于選擇 I/O 方向(輸入、輸出、AF、模擬)。
GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分別用于選擇輸出類型(推挽或開漏)和速度 (無論采用哪種 I/O 方向,都會直接將 I/O 速度引腳連接到相應的 GPIOx_OSPEEDR 寄存器位)。
無論采用哪種 I/O 方向,GPIOx_PUPDR 寄存器都用于選擇上拉/下拉。
06. I/O端口數據寄存器
每個 GPIO 都具有 2 個 16 位數據寄存器:輸入和輸出數據寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存儲待輸出數據,可對其進行讀/寫訪問。通過 I/O 輸入的數據存儲到輸入數據寄存器 (GPIOx_IDR) 中,它是一個只讀寄存器。
07. I/O數據位操作
置位復位寄存器 (GPIOx_BSRR) 是一個 32 位寄存器,它允許應用程序在輸出數據寄存器(GPIOx_ODR) 中對各個單獨的數據位執行置位和復位操作。置位復位寄存器的大小是GPIOx_ODR 的二倍。
08. GPIO鎖定機制
通過將特定的寫序列應用到 GPIOx_LCKR 寄存器,可以凍結 GPIO 控制寄存器。凍結的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。
要對 GPIOx_LCKR 寄存器執行寫操作,必須應用特定的寫/讀序列。當正確的 LOCK 序列應用到此寄存器的第 16 位后,會使用 LCKR[15:0] 的值來鎖定 I/O 的配置(在寫序列期間,LCKR[15:0] 的值必須相同)。將 LOCK 序列應用到某個端口位后,在執行下一次復位之前,將無法對該端口位的值進行修改。每個 GPIOx_LCKR 位都會凍結控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH)中的對應位。
09. GPIO寄存器描述
9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I)
GPIO port mode register
偏移地址:0x00
復位值:
● 0xA800 0000(端口 A)
● 0x0000 0280(端口 B)
● 0x0000 0000(其它端口)
9.2 GPIO端口輸出類型寄存器 (GPIOx_OTYPER) (x = A…I)
GPIO port output type register
偏移地址:0x04
復位值:0x0000 0000
位 31:16 保留,必須保持復位值。
位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
這些位通過軟件寫入,用于配置 I/O 端口的輸出類型。
0:輸出推挽(復位狀態)
1:輸出開漏
9.3 GPIO端口輸出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)
GPIO port output speed register
偏移地址:0x08
復位值:
● 0x0000 00C0(端口 B)
● 0x0000 0000(其它端口)
9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/)
GPIO port pull-up/pull-down register
偏移地址:0x0C
復位值:
● 0x6400 0000(端口 A)
● 0x0000 0100(端口 B)
● 0x0000 0000(其它端口)
位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)
這些位通過軟件寫入,用于配置 I/O 上拉或下拉。
00:無上拉或下拉
01:上拉
10:下拉
11:保留
9.5 GPIO端口輸入數據寄存器 (GPIOx_IDR) (x = A…I)
GPIO port input data register
偏移地址:0x10
復位值:0x0000 XXXX(其中 X 表示未定義)
9.6 GPIO端口輸出數據寄存器 (GPIOx_ODR) (x = A…I)
GPIO port output data register
偏移地址:0x14
復位值:0x0000 0000
9.7 GPIO端口置位/復位寄存器 (GPIOx_BSRR) (x = A…I)
GPIO port bit set/reset register
偏移地址:0x18
復位值:0x0000 0000
9.8 GPIO復用功能低位寄存器 (GPIOx_AFRL) (x = A…I)
GPIO alternate function low register
偏移地址:0x20
復位值:0x0000 0000
9.9 GPIO復用功能高位寄存器 (GPIOx_AFRH) (x = A…I)
GPIO alternate function high register
偏移地址:0x24
復位值:0x0000 0000
10. 附錄
10.1 【STM32】STM32系列教程匯總
網址:【STM32】STM32系列教程匯總
10.2 參考文檔
STM32F4xx英文參考手冊
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的【STM32】GPIO概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32】STM32F4系统架构
- 下一篇: 【STM32】GPIO相关函数和类型