STMCU小助手
发布时间:2022-6-11 21:25
|
01. GPIO简介9 q' F8 Q9 y) D6 w* e 每个通用 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)。 " C/ }' G& H' N 02. GPIO主要特性 ● 受控 I/O 多达 16 个3 B! O8 c; `% }( C7 I3 N* j ● 输出状态:推挽或开漏 + 上拉/下拉 ● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据 ● 可为每个 I/O 选择不同的速度 ● 输入状态:浮空、上拉/下拉、模拟8 S+ w' J5 r6 E T7 O1 R& S ● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入); x% s0 e) H4 t3 W ● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限 ● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置 ● 模拟功能! T7 E5 i/ A0 Y9 U! p* d3 T8 {1 x ● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能) ● 快速翻转,每次翻转最快只需要两个时钟周期 ● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种 & h/ h! r% G6 ]( u/ a 03. GPIO功能描述, |" a$ T$ @& { 根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:: _$ _7 V7 w( h/ H& M ● 输入浮空 ● 输入上拉 ● 输入下拉 ● 模拟功能5 @& h/ Z5 E% S9 p; \" g- Q ● 具有上拉或下拉功能的开漏输出; k, _) t1 H4 x' t8 F; l ● 具有上拉或下拉功能的推挽输出 ● 具有上拉或下拉功能的复用功能推挽; I+ s" I7 ~" y6 B0 y: V ● 具有上拉或下拉功能的复用功能开漏* L% `0 v3 M* h: j1 W! T8 o 04. I/O引脚复用器和映射 微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。 每个 I/O 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0 到 7)和 GPIOx_AFRH(针对引脚 8 到 15)寄存器对这些输入进行配置。& r. N' {8 l& }. B& X . `$ a4 R7 g7 L3 N ● 完成复位后,所有 I/O 都会连接到系统的复用功能 0 (AF0)。/ ?( ~8 J, |( S$ \ ● 外设的复用功能映射到 AF1 至 AF13。 ● Cortex™-M4F EVENTOUT 映射到 AF15。 d: d' I: w9 A; ^; T, ^% j
05. I/O端口控制寄存器. x' v* A8 M) E8 v 每个 GPIO 有 4 个 32 位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达 16 个 I/O。 GPIOx_MODER 寄存器用于选择 I/O 方向(输入、输出、AF、模拟)。! a$ W; R1 N- F# M6 Y$ s2 s9 ] GPIOx_OTYPER 和 GPIOx_OSPEEDR 寄存器分别用于选择输出类型(推挽或开漏)和速度 (无论采用哪种 I/O 方向,都会直接将 I/O 速度引脚连接到相应的 GPIOx_OSPEEDR 寄存器位)。 6 a' |/ O8 d' y1 e 无论采用哪种 I/O 方向,GPIOx_PUPDR 寄存器都用于选择上拉/下拉。! Y4 p$ |5 c+ E# M4 }! | & Q" @. k5 r1 F( a- d8 | 06. I/O端口数据寄存器 V+ `9 \* @2 b8 r 每个 GPIO 都具有 2 个 16 位数据寄存器:输入和输出数据寄存器(GPIOx_IDR 和GPIOx_ODR)。GPIOx_ODR 用于存储待输出数据,可对其进行读/写访问。通过 I/O 输入的数据存储到输入数据寄存器 (GPIOx_IDR) 中,它是一个只读寄存器。 07. I/O数据位操作) R2 K9 C$ H8 [% d7 U) Y 置位复位寄存器 (GPIOx_BSRR) 是一个 32 位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR) 中对各个单独的数据位执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR 的二倍。8 \6 u0 a3 j1 _; a : v; f' V' `8 s' h6 {0 l 08. GPIO锁定机制 通过将特定的写序列应用到 GPIOx_LCKR 寄存器,可以冻结 GPIO 控制寄存器。冻结的寄存器包括 GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL 和 GPIOx_AFRH。9 e3 m4 a" s6 M& f1 o* o 要对 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)中的对应位。 - U2 P" ]5 m4 P& s, b+ Z- Q7 V& W 09. GPIO寄存器描述 9.1 GPIO端口模式寄存器 (GPIOx_MODER) (x = A…I). ~" A `* s& D+ B& c GPIO port mode register 偏移地址:0x00+ P1 @+ a8 |: d: G6 Q" h; q& D 复位值:) Y0 t3 ~& k2 {2 v) P ● 0xA800 0000(端口 A) ● 0x0000 0280(端口 B) ● 0x0000 0000(其它端口) ; r9 ^! q1 w+ B. Q! @+ _, |) k
9.2 GPIO端口输出类型寄存器 (GPIOx_OTYPER) (x = A…I) J2 ]( o5 r- B* z GPIO port output type register 偏移地址:0x04 复位值:0x0000 0000 3 H4 r1 g4 T2 i7 K* V
' z Q5 w4 E( Q5 Q 位 31:16 保留,必须保持复位值。 位 15:0 OTy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15)& } y% O r9 B8 q8 y6 D4 F 这些位通过软件写入,用于配置 I/O 端口的输出类型。% p- E8 H, I4 D+ p; w 0:输出推挽(复位状态) 1:输出开漏 9.3 GPIO端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A…I/)2 j" u* m2 K. v- L4 W& Z GPIO port output speed register; ]% k9 d6 ~1 B2 R/ ^; q 偏移地址:0x085 T3 Y5 u2 d0 [" l0 J5 z 复位值:/ y6 H _3 d4 D9 ` ● 0x0000 00C0(端口 B)8 S3 {/ i8 V9 }' @2 P. l4 u ● 0x0000 0000(其它端口)! |; G1 `2 O2 \ 8 G) e0 b% s4 L2 N: j/ u1 B
; T2 k$ g' q C 9.4 GPIO端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A…I/) GPIO port pull-up/pull-down register 偏移地址:0x0C3 z# k4 @' ]' b 复位值:% E; M, d% }4 |$ u) o ● 0x6400 0000(端口 A)6 I: z: C) h: F1 ^6 v, I ● 0x0000 0100(端口 B): w/ g! f T# j6 h4 Z ● 0x0000 0000(其它端口): e. k* _$ y8 a9 j2 ^. a, g4 ?) H
% k L) ^* ^) t0 f/ M4 B 位 2y:2y+1 PUPDRy[1:0] :端口 x 配置位 (Port x configuration bits) (y = 0…15) 这些位通过软件写入,用于配置 I/O 上拉或下拉。 00:无上拉或下拉; }/ h2 o6 V9 S! c 01:上拉 10:下拉' r; N+ b% O3 m6 B3 ]8 P 11:保留( a+ j+ ~$ n" [# E 9.5 GPIO端口输入数据寄存器 (GPIOx_IDR) (x = A…I)) W( p7 n0 z2 z GPIO port input data register 偏移地址:0x10 复位值:0x0000 XXXX(其中 X 表示未定义)
6 s% v! n& J y( q/ h- n& i" y 9.6 GPIO端口输出数据寄存器 (GPIOx_ODR) (x = A…I) GPIO port output data register/ s9 o! K& M: Z8 g% Y" ] 偏移地址:0x14 复位值:0x0000 0000
8 k7 N/ Z5 X9 I$ b9 z; o 9.7 GPIO端口置位/复位寄存器 (GPIOx_BSRR) (x = A…I)$ @) l6 R7 K; r( z8 x/ d( N GPIO port bit set/reset register* ~4 P b+ H4 H) _* z' N) E 偏移地址:0x18% l& `! t2 X* h+ V |, L 复位值:0x0000 00004 S/ B; N4 U) B2 h 2 m& |% P9 J' N4 |! y
6 U4 L" M* D9 @# i; M" W6 A 9.8 GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A…I) GPIO alternate function low register2 ]1 T. f ?8 V; s& z/ p+ ^) D 偏移地址:0x205 J6 d) o: m+ e- F: I# U/ N 复位值:0x0000 0000. e2 H5 C% s( F: _
: s( y2 c4 V0 T! M$ H: N) O 9.9 GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A…I)2 K2 N; h. G# c( p# d) E) s* f GPIO alternate function high register: K6 }7 R+ J# [& T8 i! x. e! s 偏移地址:0x243 `& h O6 R, f# S! b6 B1 o 复位值:0x0000 0000
i- {) H1 U& y* e* t* k$ [6 ] |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版