你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F4 GPIO八种模式及工作原理详解

[复制链接]
STMCU小助手 发布时间:2021-10-12 14:15
1 GPIO简介! O& Z. u# f: Z' H& L4 n* V9 F
GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。) X) U; o+ _% S, C9 V$ t" ?2 J

; _$ {9 u$ W0 ?* I" L( J: m

& |6 ?- i, c+ ^STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。  并且F4系列是基于Cortex-M4内核  2 _9 V( F2 S! V

/ y) j  B1 p9 B/ y7 H6 a
% h! C. o! j, n' t& X
GPIO的复用:
. `0 `; ~. l8 N2 u" |1 z. v
. O/ c/ S6 D0 u0 h% R* V! x
1 k  Y/ N* e3 W* N, Q3 T
STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。    比如说串口  就是GPIO复用为串口
, i7 o3 b3 u* [- k- |! [- V% j. d3 W" I, E: v$ _' C9 j* B9 q
2 GPIO的工作模式/ f8 w) ^/ j. ?3 R0 G$ U- T
1、4种输入模式& C2 i/ y9 c# q
7 ?. B* L+ o) c5 x1 B& e: d
; Z  d( Y& M$ h6 `9 X: q  Z7 r: ^
(1)GPIO_Mode_IN_FLOATING 浮空输入
) Y/ i* g( M: Q) y9 o(2)GPIO_Mode_IPU 上拉输入
% V$ e9 U0 Z5 q- y/ A5 \' [& J! x4 t(3)GPIO_Mode_IPD 下拉输入. o# Y% v+ Z1 i% W
(4)GPIO_Mode_AIN 模拟输入- \) X9 U' v, P0 Q4 Y
& v& d+ m7 O1 L

  t8 l- a3 ^+ N& P: j2、4种输出模式 3 P- v' r: x1 E. Q  w* L! h. P

1 c) S0 ~' f" e
( ^$ n$ l0 i1 K2 v5 n" J* C
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
0 B, ~* M/ H) }+ b% H" Q$ S(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
  |) l$ `7 t& Q5 H5 S(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)( S5 e- H" X0 r6 U' j9 U
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
7 P4 S  V8 n6 g  n" k# c0 W+ ]3、4种最大输出速度! f5 H2 n0 {7 m! ^+ U! D
(1)2MHZ  (低速)
  t  p0 X$ P7 F% Z4 G(2)25MHZ  (中速). v" M+ C6 [/ W
(3)50MHZ  (快速)7 R4 o( s$ @$ m8 D, v( T" V2 L
(4)100MHZ  (高速)
- D$ W8 y6 V6 M; j' X: k0 @9 Z& P/ h* @
关于他们的定义,都在  stm32f4xx_gpio.h 中,都为结构体形式的定义
4 N! B5 @. S$ L: D) e6 V6 A+ b1 d" c9 k2 }4 L$ u
$ |% n0 M/ @" A; R1 I- f
3 GPIO框图剖析
3 o3 T0 m- U& ?/ ]5 [ 14.png & [0 G7 y2 d# u8 S0 ~0 t8 ]
我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式  这里我们简单的介绍下:- e. _2 r& H  |! [2 |/ Q
8 G' E2 M- @& a% g0 P1 ?1 L

/ B! m3 I- _+ H* G6 U保护二极管:  IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁
+ T( v8 o5 u( x% w上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平
( F" B, M& u, L  l& }7 LTTL施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号    也就是高低电平  并且是TTL电平协议   这也是为什么STM32是TTL电平协议的原因
2 E1 {4 \" Z5 R# ^! ~3 o P-MOS管和N-MOS管:信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式     P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭
. J, n3 K/ a$ {; a注:  VDD_FT  代表IO口,兼容3.3V和5V,如果没有标注“FT”,就代表着不兼容5V      + {/ Y1 e3 @) U

/ r* v& v( G0 d5 g1 n7 f1 k

/ k1 E  o* W! }2 f9 ^4 Q* W! y 在芯片数据手册的引脚定义中,会看到有“I/O电平”一列  有FT即为支持5V9 W. L) F% G- y7 V* V
15.png
1 U5 Y: n7 Z$ j  [9 t; A* J3 K' J6 l3 I" a4 GPIO的八种工作模式剖析:* a7 q- `# j4 U9 a# }! q1 P
浮空输入模式8 e* D3 g, [1 \, T4 s: i3 b
16.png          ( x; Q# X8 o' G0 k/ n9 a; U% F' v
浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。 (接用电压表测量其引脚电压为1点几伏,这是个不确定值) 以用来做KEY识别( w5 i9 C0 L& h) n" [! W/ f0 c3 }
, d5 {% ~6 {- D

5 S) u6 y4 q9 T' V; N上拉输入模式
4 D$ t8 u2 m/ }& y+ S; G 17.png           - i+ p. F" L  ?! G
IO内部接上拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为高电平  如果I/O口输入低电平,那么引脚就为低电平,MCU读取到的就是低电平4 j% r9 P3 V' j2 {# n& T
: Q& L5 w  `9 g3 A

7 l  W8 Z% f- J* c  ]STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。
$ a% ~9 u: Q" P3 _- R' Y5 l* D1 A: i5 Q) }2 Q8 i5 u% Y2 X
8 V) k) }- {/ K
下拉输入模式
' e# U8 W. v% l  Z+ B1 d 18.png      
4 a2 M7 N5 G/ {; D: Q  D IO内部接下拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为低电平  如果I/O口输入高电平,那么引脚就为高电平,MCU读取到的就是高电平8 Z. C1 j5 q- x* Z
8 t  X9 l+ N: p/ `% v5 z
模拟输入模式
& `! V  {' \8 A/ q 19.png          
& `2 w8 v; M/ G9 g2 f+ k当GPIO引脚用于ADC采集电压的输入通道时,用作"模拟输入"功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,CPU不能在输入数据寄存器上读到引脚状态# a2 v  d& {+ Q. C
& K- G: }. y4 P' D5 V' X
4 o9 t, T6 o& V: |4 R2 {, y
当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出8 q! j- O( J# F7 j

, @% ]+ R* [, |2 _
! g( Q% q* K! n+ v/ B7 x( I
除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式,. X& A9 _9 b& T8 y* V1 M1 b% h

9 f" r3 h9 _  c2 B9 z
: t) p  H2 c4 y1 |9 n
开漏输出模式(带上拉或者下拉)4 `1 m* G) i' G/ ]  U$ F
20.png 0 q% f; ?% Y2 I% q* j, q
在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1时,高电平,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用,此时I/O端口的电平就不会由输出的高电平决定,而是由I/O端口外部的上拉或者下拉决定   如果没有上拉或者下拉 IO口就处于悬空状态
# A' C" {* k# _/ f; V) g5 e
" Q; K' ~  H  b% a9 M/ y. C( c6 v

, w: h, q! X& h2 _9 f; g并且此时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。,I/O口的电平不一定是输出的电平   , V- }  n% a2 t

! S) C5 p( f4 o' ~; ]1 R
" G: n4 _2 A3 g8 ^4 E
推挽输出模式(带上拉或者下拉)9 d" B' E: c+ P3 L/ k/ I
21.png & K1 S+ U+ P8 }
在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1 高电平,则P-MOS管导通N-MOS管关闭,使输出高电平,I/O端口的电平就是高电平,  外部上拉和下拉的作用是控制在没有输出时IO口电平) U. G6 c# q/ Q
9 z6 s/ |/ Y$ s

6 U1 L! {; `: ~7 w2 g" t此时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。I/O口的电平一定是输出的电平   # m6 D1 b9 F# l3 S
5 c2 T) o( _( k& }5 ~- z9 P
: r2 D0 s, L% o& \! v
复用开漏输出(带上拉或者下拉)- B; s! z! R  `+ y
22.png
: D2 ?3 i* _2 N3 ZGPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效;  输出的高低电平的来源于其它外设,施密特触发器打开,输入可用,通过输入数据寄存器可获取I/O实际状态    除了输出信号的来源改变 其他与开漏输出功能相同
# }" W6 U/ R6 i  ]& c7 z7 `
* p& z6 |$ v' y: n$ i! @/ o+ l' V
( f  A' n5 c( [: Y  u1 |
复用推挽输出(带上拉或者下拉)0 V8 J; t  D( V( B1 g/ k  U
23.png                           9 d+ N3 u  s5 i6 [( `- `  x4 T- L
GPIO复用为其他外设(如 I2C),输出数据寄存器GPIOx_ODR无效;  输出的高低电平的来源于其它外设,施密特触发器打开,输入可用,通过输入数据寄存器可获取I/O实际状态    除了输出信号的来源改变 其他与开漏输出功能相同
% g" [4 V$ a2 O) w0 w1 H! S6 V
3 L  G* X9 `; J8 C5 I开漏输出和推挽输出的区别:
1 M. W6 J/ `  J; [3 v9 X+ w- l% }& Y( w" W' U

( V& A. X' d2 E- T5 _2 w3 i6 C推挽输出:2 x# b6 ]/ Y# t/ w

0 C2 V2 |* C4 n& L" [

" G4 e: N. x! k8 {, {可以输出强高低电平,连接数字器件 * ^8 ^- G; k! F. o' N* J* M3 L; w
- ?( n2 z" v8 t  r+ m9 ^

, ?3 b* G! y4 O" L推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.
/ O3 B7 `! X, H' P& \: Y0 M/ ]$ S6 l- u( z& [/ M; }9 b" R! G8 E% H

# z% _4 F# a+ T4 }3 y开漏输出:  U# P8 y5 l. B. h4 f5 ?$ Q% d
+ n5 O( D' s. v  `9 F! q$ f
9 ]4 f) K- u4 b" q9 i$ ?
可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 需要外接上拉电阻,才能实现输出高电平  合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);$ U1 t- v- {/ b: T5 h

# F, Q: ?$ }6 n  U
: r1 h5 o% O4 {& I3 M, J# l6 N$ O
在使用任何一种开漏模式时,都需要接上拉电阻,否则只能输出低电平  |' W8 i) i; q, z6 A, Z
24.png
" r3 Z; H0 Y' Y. P推挽输出电路: 其中IN端输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当IN端输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平   
  c4 q, ~% b8 g2 v, @' |/ S2 X1 r) y
2 ?0 T! ^( W! }$ H0 s- I
  J3 G- w* `2 _- U2 M; f6 v
开漏输出电路:IN端输出低电平时,三极管导通,使输出接地,IN端输出高电平时,三极管截止,所以引脚既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须接上拉电阻,
2 V0 n% p- i, H. `3 r! x- h3 E4 Z5 f; n

; G) }# f/ T& J  [+ c在STM32中选用IO模式:
! T/ C' j* d9 X4 @& ?
) u+ q1 ?: U' i, S* r& V

2 y" ?  z1 ?) E( F; `; A$ j7 X 上拉输入、下拉输入可以用来检测外部信号;例如,按键等;
! S9 S+ ^5 n) `! x7 |, U  @模拟输入 ——应用ADC模拟输入,或者低功耗下省电& ~; C! M3 O- \# w/ ^
开漏输出一般应用在I2C、SMBUS通讯等需要"线与"功能的总线电路中。
. G1 ^' \2 D: b" U 推挽输出模式一般应用在输出电平为0和3.3伏而且需要高速切换开关状态的场合。在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。
# ]/ c& D/ O5 d0 Y% L, m6 F4 m复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)2 ^6 p9 R) D0 a5 g$ h
复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)% D: r, B. g1 W8 X% f9 b) e* z
F4系列与F1系列区别:
9 S$ @, ]/ @5 X! t: Q6 L, w本质上的区别是F4系列采用了Cortex-M4内核  而F1系列采用Cortex-M3内核3 c- F9 B% |4 J) w

+ T3 _0 E8 G# s) F8 {1 V0 a+ h! c

9 L& s, q6 [; x9 `& a7 G2 OF1系列(M3)IO口基本结构:
' {3 {" l: Z2 g 25.png
6 L- U( Z5 M, A1 TF4系列(M4)IO口基本结构:4 T; x! B5 O! @0 l' ~
26.png * t& n% D5 i! i" ^# X4 u0 v
F4系列设计的更加高级与人性化,他将外部上下拉电阻转移到了输出/输入驱动器外部,使得输出模式下也可以实现内部上拉与下拉,方便了用户的使用,增加了灵活性
; p" C9 X5 j" ^
% H$ f+ G* K7 T; z0 F% p* P2 gGPIO的初始化(F4)( ~' T' k" ~; H9 M  u3 v
这里我们以初始化LED为例
/ ]7 I6 k/ m1 H8 h9 c& |* m
, m  L. K; l+ \& M5 L8 T

& d) }, h' K4 e& t: K5 W; S- W1.定义一个 GPIO_InitTypeDef 类型的结构体% y4 [* `( Y& I$ f0 y* F
  1. GPIO_InitTypeDef GPIO_InitStructure;   /*定义一个 GPIO_InitTypeDef 类型的结构体*/
复制代码
一共有5个参数
3 q- C! q4 E  r 27.png
& u6 [  G/ O. I* W" V2开启 LED 相关的 GPIO 外设时钟
/ Q; o9 z$ s! |. \! \- v
  1. RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOB, ENABLE);     /*开启 AHB1时钟*/
复制代码
   Q:为什么要设置时钟?0 g& h4 v# ?0 Z
: Q3 a( \: X) a& v1 y4 y9 d( o$ |

. ~- o& W( m9 a, l5 G( w    任何外设都需要时钟,51单片机,stm32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。stm32是低功耗,他将所有的门都默认设置为disable(不使能),在你需要用哪个门的时候,开哪个门就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以,   其他的没用到的可以还是disable(不使能),这样耗能就会减少。
. f6 u+ v; c% [' W0 \8 n( K$ V7 X3 Y# E) t
7 Y3 g; f% }4 \
Q:为什么 STM32 要有多个时钟源呢?
. j2 F) ]* \! N0 R2 c+ \
* f( X/ k! V: ~. R% A! d
$ h6 a. J( A  ?/ u7 ?( c5 \- h
因为首 先 STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率, 比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁 干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。  s6 g! |& G8 o1 `
% M2 F/ G/ R1 {1 S

8 [# T2 c7 f7 d; j3 u0 X

4 T/ M. k% ~* f+ F3 ~0 D而相对应的外设功能所使用的时钟 在stm32f4xx.h 中即可查看到
6 n6 g. G/ Z; S: M9 L* q9 L
9 c& m+ x3 ?' n  J% q# B

. n6 Z4 f6 P) d8 ?' ZRCC_AHB1( G( s& Y% x( K, B4 j+ w
28.png
, k0 d; e4 u  s- N: \RCC_APB1
/ ?- W& R5 l7 H+ h 29.png
) w2 h' {3 N9 M& H, H: j  \6 R3选择要控制的 GPIO 引脚3 f7 G. B7 ~! G* S8 z
  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  /*选择Pin9引脚*/
复制代码
可选引脚为0-15 一组IO口有16个引脚
1 R& C1 V; G) Q/ s+ \; W 30.png
/ N8 o: f" F" Z( T! w4设置所选引脚的模式2 Z; d0 M4 C. b
  1. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   /*设定为输出模式*/
复制代码
引脚的模式共有四种,分别为输入,输出,复用,和模拟模式
5 m$ N7 T/ Z8 w% A" D7 ?* A7 g 31.png
0 C& ^" }! Q" V" m5 设定所选引脚的输出类型
7 U  k6 X! s& w! V- f( L
  1. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /*设置引脚的输出类型为推挽输出*/
复制代码
输出模式有两种:推挽输出和开漏输出   3 ]) j9 p6 W- G3 f0 B2 d
32.png
+ h3 Y: K; @6 p) l只有输出模式才需要配置,输入模式下不需要配置
' a- E& @" M! `, X3 s$ y* ]
  r5 \0 G# @' U  A) o0 k/ f2 C
8 ~& J% u) K; f5 a
6 设定所选管脚的速度! Q$ G4 P; O  g6 T1 \. ]$ b# |- V
  1. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//设定速度为100MHz  高速模式
复制代码
33.png
* U  j* s( l9 D8 b7 设定所选管脚的上拉与下拉& t1 H9 P  |& Q4 n0 X: s2 o
  1. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /*设置引脚为上拉模式*/
复制代码
可设置为:上拉,下拉,与浮空
3 h6 D5 Q# z* q+ H 34.png
. x$ M6 v* ?8 e! ?8初始化GPIO
+ X5 \2 X+ \$ z& e' A
  1. GPIO_Init(GPIOB, &GPIO_InitStructure);    //初始化所设置的引脚
复制代码
GPIO_Init() 是官方配置的初始化函数  第一个参数是GPIOX 第二个参数是结构体所对应GPIO各种参数的配置
# m  B; F2 ~9 L/ D- e, V& ~' h2 y, \
! Q2 d3 g% w) ~* P; S3 ~0 lGPIO的初始化(F1)
& [' i& `6 X  q' t" w, yF4的初始化相较于F1系列有了很大的改变,在配置F1系列时,结构体只有三个参数  7 I% ~& \% V& a

; Y$ @5 A: T* p6 h% z3 `
: q! r) i) J! l% H/ i- e
GPIO_InitTypeDef 类型的结构体, a; k2 F% R0 l9 ]
35.png
- L- }8 s5 J2 G: l0 F所选管脚的速度
: S( E% J# w( o 36.png ' H0 I" S" w3 m+ T$ B( x. w# ~9 P
所选管脚的8种模式
; @0 {5 g6 @5 P! C 37.png
) u4 I1 ^9 s4 m区别:
8 Y- O3 F; e0 F, E8 L: l( @3 g  t) b' {& R  b- n! ^" m, ^
/ {7 U& b# b0 G/ |* _
F1(M-3)系列管脚速度只有三种模式  并且管脚的模式配置八种模式全部都在一起定义,直接设置即可
( [. Y& k8 e* _9 O* r6 w9 G8 x5 Y$ u0 ?( `- B/ D9 M
! r0 Q. r" j% P+ m( X
总归还是大同小异,不做过多介绍,看下下方配置即可  c( S5 F% W$ m) Z; I) `; d) l
  1. void led_init(void)' [- ?: x. B8 `$ J
  2. {. l; U8 o$ ^& S, e( A  d1 P
  3.         GPIO_InitTypeDef GPIO_InitStruct;                    //定义初始化结构体0 z% |( t1 }$ l; ]+ G
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟' ^4 I! K9 x" u/ H
  5.        
    ! g5 @8 p3 I/ ^
  6.         GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_Out_PP;     //配置模式
      K) y% Z$ U) c+ J5 S' O/ B
  7.         GPIO_InitStruct.GPIO_Pin     = GPIO_Pin_0;           //配置哪个IO口
    % h6 }& i! X4 `9 k/ q  ?
  8.         GPIO_InitStruct.GPIO_Speed   = GPIO_Speed_50MHz;     //配置IO口速度,仅输出有效. @& |" l( o0 E' Z$ p; T
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                   //初始化GPIOA的参数为以上结构体  L! r/ H7 h: w( |  w4 ]$ D
  10. }
复制代码

7 _2 |7 A, ^7 P/ F/ e2 ~
6 \" @# X9 D9 ^* `/ V

5 n" U! ]: h" E9 q
6 r) v: v8 @1 L; L( M" Y
收藏 评论0 发布时间:2021-10-12 14:15

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版