STMCU小助手
发布时间:2023-2-1 21:37
|
一、GPIO是什么? GPIO,全称为General Purpose Input Output Ports(通用输入输出端口),也就是通用IO口。 GPIO是控制或者采集外部器件的信息的外设,可以由软件程序控制,用于输出或者输入高低电平。6 j1 d# k) \+ ]3 K GPIO的使用非常广泛。可以与硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。' J) `) e6 s) f3 ~ 9 s! {. q) j% v0 M GPIO按组分配,每组16个I/O口,组数视芯片而定。 以STM32F429IGT6为例: ① 一共有9组IO,PA~PI。 ② 一共有140个IO口,其中PA~PH每组有16个IO,PI只有12个IO口。 注意:芯片的数据手册中,引脚标注为 FT 的,是可以兼容 5V 电平的。 / x+ A5 g/ `6 Y; `5 R/ X. I ST官方提供的GPIO基本结构图
) ?' E7 H1 w1 s; `# \) D 二、GPIO的8种工作模式 8种工作模式,分为4种输入模式和4种输出模式。 1. 浮空输入模式(GPIO_Mode_IN_FLOATING) 浮空输入模式下,上拉/下拉电阻为断开状态,施密特触发器为开启状态,I/O引脚的输出功能被禁止。 该模式下,外部的电平信号通过①(I/O引脚)进入MCU,先经过②(施密特触发器)的整形后,再进入③(输入数据寄存器),最后MCU可以在④(输入数据寄存器的另一端)随时读取I/O引脚的电平。( X" a z, T8 ~# ~& [1 @3 i! u: r 即,整形后的I/O引脚的电平信号直接进入输入数据寄存器,MCU直接读取I/O引脚的电平。 如果I/O引脚无输入时,MCU读取到的电平状态是不确定的。所以引脚不建议悬空,易受干扰。 如果I/O引脚输入高电平时,MCU读取到高电平1。 如果I/O引脚输入低电平时,MCU读到低电平0。 # w z8 H+ V. W: H- I1 P 总结,浮空输入模式: I/O引脚输入什么电平信号,MCU就读取到什么电平信号;2 ?' `$ b7 ^& P" X 无信号输入(默认)时,MCU读取到的电平信号是不确定的。) t- x% O; B5 }$ {# M$ g 8 V l6 V, k; L0 \ 浮空输入模式,可以用于KEY识别,RX1等。1 {0 h5 @. [% ~0 S0 l& ^' m- Y + B; L5 H0 A3 ?7 |
5 j( g. H( \$ L$ B% A5 `% Z 2. 上拉输入模式(GPIO_Mode_IPU)4 n* N- X1 H9 n( z5 j1 D6 B3 h6 r 上拉输入模式下,上拉电阻导通,施密特触发器处于开启状态,I/O引脚的输出功能被禁止。" ^- r: C: _% N; `9 C' q GPIO的内部上拉电阻的阻值较大,所以通过内部上拉输出的电流是很弱的,即“弱电流”。 如果需要大电流用作电流型驱动输出,还是要用外部上拉电阻。$ G% i4 D* g0 Z% { 上拉输入模式与浮空输入模式不同之处,是在①(I/O引脚)和②(施密特触发器)之间接入了一个上拉电阻,将电位拉高,比如拉到VCC。 如果I/O引脚无输入时,I/O引脚处相当于断开,上拉电阻的电流直接流向④,MCU读取到高电平1。 如果I/O引脚输入高电平时,I/O引脚的电压等于VDD的电压,电流还是流向④,MCU读取到高电平1。 如果I/O引脚输入低电平时,I/O引脚处相当于接地,上拉电阻的电流直接流向I/O引脚,MCU读到低电平0。 5 M( F* B6 p2 w3 N$ i 总结,上拉输入模式:6 M' H) L& w9 v: b 无信号输入(默认)或输入高电平时,MCU都是读取到高电平1; 输入低电平时,MCU读取到低电平0。/ ]9 {; q, Q8 B: q! Q2 A 上拉输入模式,可以用于按键检测。 ' n) `% S! e. @: n p0 }- D
% x% o. P7 N, P& y 3. 下拉输入模式(GPIO_Mode_IPD)! M2 }2 O7 q+ U! C8 g7 X 下拉输入模式下,下拉电阻导通,施密特触发器处于开启状态,I/O引脚的输出功能被禁止。 ) v. c6 ]! n% X0 a 下拉输入模式与浮空输入模式不同之处,是在①(I/O引脚)和②(施密特触发器)之间接入了一个下拉电阻,将电位拉低,比如拉到GND。6 N3 c. G3 k: Q, m+ C" t , y( [7 \" q: }8 k 如果I/O引脚无输入时,I/O引脚处相当于断开,I/O引脚的电压等于VSS的电压,MCU读取到低电平0。 如果I/O引脚输入高电平时,由于下拉电阻阻值比通道④的阻值大,所以电流流向④,MCU读取到高电平1。 如果I/O引脚输入低电平时,I/O引脚处相当于接地,I/O引脚的电压等于VSS的电压,MCU读到低电平0。 3 \1 ]" S. n* q6 n 总结,下拉输入模式: 无信号输入(默认)或输入低电平时,MCU都是读取到低电平0;! y. ~+ u- [! W5 a, a 输入高电平时,MCU读取到高电平1。 3 K& P" w7 [3 j2 R5 h/ ^4 w/ Z 下拉输入模式,和上拉输入模式相似,可以用于按键检测。 6 _- u4 i" n, y; W
4. 模拟输入模式(GPIO_Mode_AIN)( C8 \0 O' m- M7 ~ 模拟模式下,上拉/下拉电阻为断开状态,施密特触发器为关闭状态,输出部分的双MOS管也断开。5 F* y7 S6 \% q. v) V0 e 模拟输入模式下,外部的电平信号通过①(I/O引脚的模拟输入通道)进入MCU,MCU可以直接在③(模拟输出口)随时读取I/O引脚的电平。/ Y% j- j. R3 o4 K+ y 9 R8 V! {0 j4 W. S; t 由于施密特触发器断开,所以电信号也无法进入输入数据寄存器,所以MCU无法在“输入数据寄存器”中读取到有效的数据。$ w y7 i+ P: ~" O; V3 T9 f7 F3 Z 总结,模拟输入模式: 输入的电信号为模拟电压信号,而不是数字电平信号。 模拟输入的模拟电压信号,直接送到片上外设,一般是ADC。 除了 ADC 和 DAC 要将 I/O 配置为模拟通道之外,其他外设功能一律要配置为复用功能模式。 ! G' A" N* f' a( ]& T 模拟输入模式,可以用于ADC采集或DAC输出,或者低功耗下省电。 6 N' _" R( ?# j! z 5. 开漏输出模式(GPIO_Mode_Out_OD)8 y( Z/ g5 `7 y, r 开漏输出模式下,P-MOS管一直处于断开状态。4 V& ^/ `: U$ W5 Q+ S9 | ( o+ N3 W; \1 V6 k- z9 u5 Z 开漏输出模式下,MCU通过左边的①(位设置/清除寄存器)或(输出数据寄存器)写入数据后,该数据位将通过②(输出控制电路)传送到④(I/O引脚)。, A! C: a/ o# t) Y q: F# D! W 同时,输入功能可用,⑤(施密特触发器)处于开启状态,可以通过⑥(输入数据寄存器)可读取④(I/O引脚)的实际电平状态。, o* Q5 w+ h+ [. R 当MCU输出低电平0时,经过“非门”后,转换为高电平1,N-MOS管导通,使I/O引脚输出低电平。 当MCU输出高电平1时,经过“非门”后,转换为低电平0,N-MOS管断开,I/O引脚处于悬空状态,此时I/O引脚输出的电平高低是由I/O引脚外部的上拉或者下拉决定。 4 q" {7 O5 W5 K7 d# P9 l; | 开漏输出,输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对较强,一般20mA以内。$ i3 u# k& o" Q6 v8 Y$ |' f; R# f7 U 2 g; P1 {# R3 @7 l! i! A: j
5 [: n7 c4 P* D3 E9 s" Z% z 6. 开漏复用输出模式(GPIO_Mode_AF_OD) A! h+ D+ n; {% Q# }+ i# [3 M GPIO可以是通用的IO口功能,还可以是其他外设的特殊功能引脚,这就是GPIO的复用功能。 9 u: {3 C/ \8 ^* d, b- P$ q GPIO复用为其他外设,输出数据寄存器无效,④(I/O引脚)输出的高低电平由①(其他外设的输出)决定。 同时,输入功能可用,⑤(施密特触发器)处于开启状态,可以通过⑥(输入数据寄存器)可读取④(I/O引脚)的实际电平状态,同时外设可以读取IO引脚的信息。1 `" M; C: ~& ~' ? 1 }$ M, L! V: R1 { J 开漏复用输出模式与开漏输出模式的配置基本相同,除了输出信号的来源不同,其他与开漏输出模式的功能相同。 即,②(输出控制电路)的输入,开漏输出模式是由输出数据寄存器输出,开漏复用输出模式是由其他外设输出。* J D# P( u: O- {, z2 B7 t1 R( I
7. 推挽输出模式(GPIO_Mode_Out_PP)$ v% R8 ?$ J0 [1 H' ^ 推挽输出模式,从结果上看它会输出低电平VSS或者高电平VDD。推挽输出跟开漏输出不同的是,推挽输出模式P-MOS管和N-MOS管都用上,可以把“输出控制”简单地等效为一个非门。 当MCU输出低电平0时,经过“非门”后,转换为高电平1,P-MOS管截止,N-MOS管导通,使I/O引脚下拉到VSS,即I/O引脚输出低电平。0 X' T! D2 A& Z) \& F# P 当MCU输出高电平1时,经过“非门”后,转换为低电平0,P-MOS管导通,N-MOS管截止,使I/O引脚上拉到VDD,即I/O引脚输出高电平。 同时,输入功能可用,⑤(施密特触发器)处于开启状态,可以通过⑥(输入数据寄存器)可读取④(I/O引脚)的实际电平状态。% g' {/ h5 ?6 ?8 m; m/ @9 S) X 总结,推挽输出模式下,P-MOS管和N-MOS管同一时间只能有一个MOS管是导通的。当引脚高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有很大的提高。* O1 l$ k: |$ N! L9 y+ q % E# w4 u4 {; P) J4 a3 n 由于推挽输出模式输出高电平时,是直接连接VDD,所以驱动能力较强,可以做电流型驱动,驱动电流最大可达25mA。该模式也是最常用的输出模式。. K; ]$ b+ @$ G) _ " I1 |" _2 ^3 d5 r0 I2 P6 T
8. 推挽复用输出模式(GPIO_Mode_AF_PP) GPIO可以是通用的IO口功能,还可以是其他外设的特殊功能引脚,这就是GPIO的复用功能。% n& P8 ^- V1 T GPIO复用为其他外设,输出数据寄存器无效,④(I/O引脚)输出的高低电平由①(其他外设的输出)决定。 同时,输入功能可用,⑤(施密特触发器)处于开启状态,可以通过⑥(输入数据寄存器)可读取④(I/O引脚)的实际电平状态,同时外设可以读取IO引脚的信息。. k" @/ d' l7 k$ w r, ~ 推挽复用输出模式与推挽输出模式的配置基本相同,除了输出信号的来源不同,其他与推挽输出模式的功能相同。 即,②(输出控制电路)的输入,推挽输出模式是由输出数据寄存器输出,推挽复用输出模式是由其他外设输出。% E& p" ^5 O" [& g+ ]) s& q3 O * W* S" t; ], i. O* W3 u" k4 x
三、GPIO寄存器, ^0 K1 x# P" y' K0 \3 S# m 每组GPIO的寄存器包括: 配置寄存器: 一个端口模式寄存器(GPIOx_MODER)* C( l& _$ k9 Q$ z! }' U" `/ N 一个端口输出类型寄存器(GPIOx_OTYPER)7 ?) \, H) G0 g% Y, [ 一个端口输出速度寄存器(GPIOx_OSPEEDR)4 M$ N5 G& \/ x1 C" h 一个端口上拉下拉寄存器(GPIOx_PUPDR) 数据寄存器:2 G; B4 @3 Y3 D 一个端口输入数据寄存器(GPIOx_IDR)- v* w7 d' B: R5 ~& N6 M8 _7 H8 D! X1 @ 一个端口输出数据寄存器(GPIOx_ODR)) N! m' a$ i4 I+ ~( O6 l, Q3 u# Q # e l- ]' m0 ?5 {2 s 置位/复位寄存器:' N: U5 y8 @) n/ \0 F1 r 一个端口置位/复位寄存器(GPIOx_BSRR) & N% `+ M) x6 O9 k6 h: a; q 锁存寄存器:$ A( J, G% h3 F- ~8 F7 q/ Q: w9 Q 一个端口配置锁存寄存器(GPIOx_LCKR)/ [7 b/ r$ Y* z; j3 I 复用功能共寄存器:2 p' |; Q/ ^7 `$ O; b/ ? 两个复用功能寄存器(低位GPIOx_AFRL & 高位GPIOx_AFRH) b$ B4 ]: ^* x- B 注意:: s7 e* N9 c4 ^* Z' A! h ① 每组GPIO由10个寄存器组成,如果芯片有 GPIOA ~ GPIOI 9个组,那么一共有对应90个寄存器。5 K9 E, {( E. i/ R$ T ② 如果配置一个I/O口需要2个位,那么刚好32位寄存器配置一组16个I/O口。 ③ 如果配置一个I/O口只需要1个位,一般高16位保留。7 q& u$ O4 ]! ^: _1 l ④ BSRR寄存器32位分为低16位BSRRL和高16位BSRRH, BSRRL配置一组16个I/O口的置位状态(1),/ a; y% }& [. l. H: U3 g BSRRH配置一组16个I/O口的复位状态(0)。 ⑤ rw表示可读可写;r表示只可读;w表示只可写;Res.表示保留位,必须保持复位值。) H. ^- v, ]3 ^/ l* B
0 d/ \, h. P+ @ 1. GPIO端口模式寄存器(GPIOx_MODER) 该寄存器是GPIO的模式控制寄存器,用于控制GPIO的工作模式。 该寄存器共32位,每2个位控制1个I/O口。 " ^* }& E* \0 |8 g 以 GPIOA = 0xABFFFFFF 为例:1 H) ?& n0 {% O6 u6 `: i" I ① 低16位的值是FFFF,都是1,即 PA0 ~ PA7 默认都是模拟模式。8 {" C0 k! o' T. d$ x L2 h$ e" w8 D ② 高16位的值是0xABFF,即 PA8 ~ PA12 是模拟模式,PA13 ~ PA15 是复用功能模式。6 ]5 D& X9 o; F8 _ 0 ~+ w4 G# Z# D# g
/ Q. d7 F0 t, v. W/ M
0 q2 g" {- q* X5 b* q. a 位 2y+1:2y MODERy[1:0]:端口x配置位(Port x configuration bits)(y=0…15)' S6 W L# b. e& i 这些位通过软件写入,用于配置 I/O 模式。2 m3 K; J; Q: o 00:输入模式(复位状态)5 P f: [" B; F- M1 s J 01:通用输出模式( d6 T- N( g1 V( b6 F 10:复用功能模式 11:模拟模式 2. GPIO端口输出类型寄存器(GPIOx_OTYPER) 该寄存器用于控制GPIO的输出类型,仅用于输出模式,在输入模式(MODER[1:0] = 00 / 11 时)下不起作用。9 ^0 X( G* E s0 h! h$ r' A7 Z 该寄存器的低16位有效,每1个位控制1个I/O口。 复位后,该寄存器的值均为0,即I/O口在输出模式下默认为推挽输出。4 f9 F0 ?/ J4 q* _# q& _1 ^- F # Q, O/ S2 q( q: X1 u* C% W
! P8 F2 w6 p( u4 [ 位 31:16 :保留,必须保持复位值。! R+ ?# }& [7 s9 y 位 15:0 OTy:端口x配置位(Port x configuration bits)(y=0…15)- y8 \; L1 Q' R6 ]# B/ t5 U" \1 Q+ W' @ 这些位通过软件写入,用于配置 I/O 输出类型。 0:推挽输出(复位状态) 1:开漏输出 4 X. U, L' T) n9 Q) X, c4 O9 ? 3. GPIO端口输出速度寄存器(GPIOx_OSPEEDR)8 H, `) A+ q8 `7 P' D 该寄存器用于控制GPIO的输出速度,仅用于输出模式,在输入模式(MODER[1:0] = 00 / 11 时)下不起作用。6 P, D9 Q7 ~1 w( ?9 x- W 该寄存器共32位,每2个位控制1个I/O口。* H3 b3 a4 I" x, ] & d4 a( A; P" {+ T+ C+ K5 a 复位后,该寄存器的值均为0,即I/O口在输出模式下默认为推挽输出。- {1 ?2 @, F! O- S
2 [( @6 O2 t6 e6 G7 @4 i( b
- O! {' w" B' M% a+ a' w* t% A 位 2y+1:2y OSPEEDRy[1:0]:端口x配置位(Port x configuration bits)(y=0…15) 这些位通过软件写入,用于配置 I/O 输出速度。9 |' i. Z5 K! p% l# N- y 00:低速 ( 2MHz) 01:中速 ( 25MHz) 10:高速 ( 50MHz)( i, |6 ^. x- { 11:超高速(100MHz) 注: 有关 OSPEEDRy 位以及 V D D V_{DD}VDD范围和外部负载的值,请参见产品数据手册。. M: s f! F7 g4 U3 x& l% q 4. GPIO端口上拉/下拉寄存器(GPIOx_PUPDR)3 K4 i3 d/ U5 t/ b: q 该寄存器用于控制GPIO的上拉/下拉。! n" _$ S# @* n5 D, R 该寄存器共32位,每2个位控制1个I/O口。 * J: p6 ~% I7 b! P 复位后,该寄存器的值一般为0,即无上拉或下拉。
位 2y+1:2y PUPDRy[1:0]:端口x配置位(Port x configuration bits)(y=0…15)6 e# z4 W [: @, j! ~ 这些位通过软件写入,用于配置 I/O 上拉或下拉。 00:无上拉或下拉) P7 H0 F8 P) @ H9 f 01:上拉. o$ A/ J, k2 k/ z2 {! M4 Z6 o% M" { 10:下拉* M- z6 j" l% U" H1 H1 e+ d 11:保留 ; q2 E7 x7 [$ d. u6 j 5. 端口输入数据寄存器(GPIOx_IDR)! o2 v) L, V6 M3 y1 d3 a 该寄存器用于控制GPIO的输入高电平或者低电平。4 Y2 u- }+ n$ s& k+ F) d2 Y 该寄存器的低16位有效,每1个位控制1个I/O口。- w, v/ c$ s- r5 C4 |: k. A# b( B 该寄存器是只读权限,当CPU读访问该寄存器时:( w8 ^) x j; a% h" L( G8 c% z4 ] 如果对应的某位为0,则表示设置该I/O口输入的是低电平;1 ^) A# s' ?( }( x, F! l 如果对应的某位为1,则表示设置该I/O口输入的是高电平。
8 @' y) a8 H. l; a
; q6 V2 Q9 \$ V 位 31:16 :保留,必须保持复位值。 位 15:0 :IDRy:端口输入数据(Port input data)(y=0…15)3 ?1 K5 h( Q+ C `1 F0 ?/ B2 h 这些位为只读。它们包含相应 I/O 端口的输入值。 5 d" v A1 b9 m 6. 端口输出数据寄存器(GPIOx_ODR), t( s7 K' u) {; R 该寄存器用于控制GPIO的输出高电平或者低电平。 该寄存器的低16位有效,每1个位控制1个I/O口。( ~- E* A) \4 Z1 |. ? 7 q: I; J) m, L 当CPU写访问该寄存器时: 如果对应的某位写0,则表示设置该I/O口输出的是低电平; 如果对应的某位写1,则表示设置该I/O口输出的是高电平。
# p( C0 M3 U* a5 J. g
* M, }+ E& s" T7 X1 M/ { 位 31:16 :保留,必须保持复位值。 位 15:0 :ODRy:端口输出数据(Port output data)(y=0…15)1 q& k0 e' g7 H 这些位可通过软件读取和写入。" ?" g$ x% f) k1 e! F0 Q" m, L 注: 对于原子置位/复位,通过写入 GPIOx_BSRR 或 GPIOx_BRR 寄存器,可分别置位和/或复位 ODR 位(x=A…F)。 7. 端口置位/复位寄存器(GPIOx_BSRR) 该寄存器也用于控制GPIO的输出高电平或者低电平。 . v4 A/ V# T; [* |) K5 |9 [ BSRR寄存器32位有效。 对于低16位(0 ~ 15): 我们往相应的位写1,那么对应的IO口会输出高电平; 我们往相应的位写0,对IO口没有任何影响。1 G% }1 ~/ r: c* C' e 对于高16位(16 ~ 31)作用刚好相反: 我们往相应的位写1,那么对应的IO口会输出低电平;6 D) f. ?7 G, j: Q 我们往相应的位写0,对IO口没有任何影响。 总结: 对于BSRR寄存器,写0时,对I/O口电平无影响。' y4 p: J/ s* w1 b8 ] 如需输出高电平,则将对应的BS位写1; 如需输出低电平,则将对应的BR位写1。 & p7 `! G/ I6 {; Q% _$ V ODR寄存器和BSRR寄存器的不同之处: ODR是可读可写权限,而BSRR是只写权限。( O# u1 ~" w% Y8 Q3 G; M* M ODR寄存器,我们要设置某个IO口电平,我们首先需要读出来ODR寄存器的值,然后对整个ODR寄存器重新赋值来达到设置某个或者某些IO口的目的。 BSRR寄存器,我们就不需要先读,而是直接设置即可,这在多任务实时操作系统中作用很大。 BSRR寄存器比ODR寄存器更好的地方,就是BSRR寄存器改变引脚状态的时候,不会被中断打断。而ODR寄存器有被中断打断的风险。 , c) h6 J$ a# A" j' e0 o
; x, c% |, F6 W; K( |/ M
|+ k; P! C7 ~5 V/ t 位 31:16 BRy:端口x复位位y(Port x reset bit y)(y=0…15)! t3 y9 i$ V* f6 Z' x8 ?' \ 这些位为只写。读取这些位可返回值 0x0000。/ J4 A7 ^1 y6 z 0:不会对相应的 ODRx 位执行任何操作' b# R$ |5 D- v4 e% G: `! e8 i* d 1:复位相应的 ODRx 位 注: 如果同时对 BSx 和 BRx 置位,则 BSx 的优先级更高。 位 15:0 BSy:端口x置位位y(Port x set bit y)(y=0…15) 这些位为只写。读取这些位可返回值 0x0000。0 D% \6 n5 k/ G% `. L2 G 0:不会对相应的 ODRx 位执行任何操作 1:置位相应的 ODRx 位9 l' }& \/ x( J 8. 端口配置锁定寄存器(GPIOx_LCKR) 该寄存器的每个锁定位冻结一个特定的配置寄存器(控制寄存器和复用功能寄存器)。) \' f7 c& v) p( K0 t& C" u 6 \2 Y1 W- D5 _5 H
/ u% R s p! q( A' x/ [
/ e; y& x5 V+ R; u$ @- ? 位 31:17 :保留,必须保持复位值。0 v% r5 f+ }, S( S+ E 位 16 LCKK:锁定键(Lock key) 可随时读取此位。可使用锁定键写序列对其进行修改。 0:端口配置锁定键未激活" X, V6 ~9 I, C/ X) l/ ~& D1 |! c6 m% \ 1:端口配置锁定键已激活。在下一次 MCU 复位或外设复位之前,GPIOx_LCKR 寄存器始终处于锁定状态。7 u6 L# D6 |5 Z3 w. k7 f$ O3 c9 g 5 Q6 f9 J! } u( G4 Q 位 15:0 LCKy:端口x锁定位y(Port x lock bit y)(y=0…15). N! U, p: ?: K n 这些位都是读/写位,但只能在 LCKK 位等于 “0” 时执行写操作。* @% @) A( l" x' ] 0:端口配置未锁定, b# ^; G, H! x 1:端口配置已锁定7 X) @) n0 N; v: b6 m0 E: D9 h 9. 复用功能寄存器(GPIOx_AFRL、GPIOx_AFRH)- q0 U* d4 A5 i' X 该寄存器分为高位AFRH和低位AFRL,分别控制16位,即分别控制8个I/O口。- r2 f8 u- ~0 c6 F ! c- t5 J! @. v$ |6 E 复用功能寄存器有2个,都是32位有效的寄存器,分高位(AFRH)和低位(AFRL)。复用器采用16路复用功能输入AF0~AF15,通过GPIOx_AFRL(引脚 0~7)、GPIOx_AFRH(引脚 8~15)寄存器对复用功能输入进行配置,每四位控制1路复用。5 n7 M( s& ]; @% E I/O口并不能随意复用功能,而是有规定的,可以通过查阅数据手册来获取每个I/O引脚的复用功能。 8 D7 j [- r0 O1 b( z, B3 X% Y
位 31:0 AFRy[3:0]:端口x引脚y的复用功能选择(Alternate function selection for port x pin y)(y=0…7), K8 g& ` j( c9 {% P 这些位通过软件写入,用于配置复用功能 I/O 。% M6 a) O; p7 ]$ I @* d2 f2 \ AFSELy 选择: 0000:AF0 1000:AF87 _. h ~3 E B6 x0 B 0001:AF1 1001:AF9& u2 ^& ?/ r# C9 `1 Y3 F( q/ ?. \ 0010:AF2 1010:AF10( k2 h7 s' `1 E0 q9 ^ 0011:AF3 1011:AF11 0100:AF4 1100:AF121 S4 G' ^3 t7 ^5 T& U 0101:AF5 1101:AF13- w0 x) }2 y7 T. x9 b1 f$ x+ J 0110:AF6 1110:AF147 _. ^9 H# o) Y$ { 0111:AF7 1111:AF15 ———————————————— 版权声明:零号萌新 ' L1 Z9 z+ M V9 B, u |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版