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

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

[复制链接]
STMCU小助手 发布时间:2021-10-12 14:15
1 GPIO简介
+ P! V& O6 S% S! x; uGPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。) ]$ C5 L$ n/ S6 j
" A5 U8 D" o" n2 x6 C- I5 p  @  D6 N
" e1 d" n: [; _/ N. u
STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。  并且F4系列是基于Cortex-M4内核  $ h+ u2 }3 r$ H& w% L
4 J- A  _' g( Q
$ U( s" ]9 H. W0 t( f6 u  p
GPIO的复用:- T, Y9 u/ ?+ ~7 H
9 n8 v$ S6 L/ }; \/ D

8 w6 s, a; z5 |* M' H, [& L% lSTM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 共用的。也就是说,一个引脚可以有很多作用,但是默认为IO口,如果想使用一个 GPIO内置外设的功能引脚,就需要GPIO的复用,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。    比如说串口  就是GPIO复用为串口
4 c8 a4 G: D& U4 p+ e, O1 o  r7 j
1 @& ~/ @1 C3 g) U+ T2 GPIO的工作模式
* y' U3 @! A/ G5 B4 K, j1、4种输入模式! Q. u& g+ y+ R+ z  e

0 _+ H9 Y* M8 V5 n4 a- }7 n$ i2 B

1 y, o" Y4 A, Q. e  v  P: m(1)GPIO_Mode_IN_FLOATING 浮空输入
' H+ I% G( p# r$ M. b/ [2 p(2)GPIO_Mode_IPU 上拉输入
! B7 h6 G) e8 n* d% {0 q0 ~+ a  Q& T8 D(3)GPIO_Mode_IPD 下拉输入8 P# }) d5 j2 n
(4)GPIO_Mode_AIN 模拟输入3 |  a* ^$ A7 L2 h; s. K
2 R: g, j- D6 A' y
( K7 |( w2 b0 k, E/ Z
2、4种输出模式
8 s% T9 z( o$ O: h0 V/ F$ G1 m+ W  b2 ^: j# D/ R
; U/ \3 ]7 _* }# e: p4 t: b
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)) C* l, J* @. M" r: I. c5 a
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
) q2 z) x$ z2 D* J: y3 h% T+ Y; Y. @(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)% A6 H/ S9 K( _/ ]1 Z: ]$ N$ o
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
0 z. A: H, L" ~3、4种最大输出速度/ q, Y, x5 ~6 E+ `; y2 J
(1)2MHZ  (低速)
4 z% q4 e; O6 m5 F' f; S(2)25MHZ  (中速)! Z. r8 d6 w1 J+ l& H3 b% d" j0 e
(3)50MHZ  (快速)
/ E/ V& r; S/ N& H(4)100MHZ  (高速)
2 j$ J( U- l9 x/ N- a% a
) u$ |# ]& w5 U% V关于他们的定义,都在  stm32f4xx_gpio.h 中,都为结构体形式的定义
: V. c$ M8 V9 q  g  Q9 k6 \0 w
) M' G9 L3 w( ~+ i

: t1 c$ S; O9 G; S3 GPIO框图剖析
2 e5 a1 x( L3 a' ~8 {4 \% z 14.png ; w  }, Z# Y& {2 C% O) |
我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式  这里我们简单的介绍下:) R/ T: }; ]  j; H

. g7 d# {; g! V0 l/ w- g

5 a0 W+ h3 S% L) f保护二极管:  IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入,当引脚电压高于VDD_FT时,上方的二极管导通,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁
1 ]8 N: u+ {9 v" E3 t上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平, f5 T: p7 ?+ Z9 e; l& d
TTL施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号    也就是高低电平  并且是TTL电平协议   这也是为什么STM32是TTL电平协议的原因
' b# M& @8 z5 \- ^: ]6 f P-MOS管和N-MOS管:信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式     P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭$ _7 x. q) I; `5 f) w" F
注:  VDD_FT  代表IO口,兼容3.3V和5V,如果没有标注“FT”,就代表着不兼容5V      
( Q0 ?2 Z, Z9 V
+ I3 A, E  H" g  ]% f5 h/ z4 y+ J
) `3 A1 w% W& O0 P; p2 p
在芯片数据手册的引脚定义中,会看到有“I/O电平”一列  有FT即为支持5V; K# n9 t: X' \: a- b2 x
15.png / @. Z, o; d. U
4 GPIO的八种工作模式剖析:) \4 c8 V6 _  ~6 d& M2 I9 W! R. e
浮空输入模式
2 O% j$ l/ v4 E 16.png          & [- ~" ?# T4 N
浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。MCU直接读取I/O口电平,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。 (接用电压表测量其引脚电压为1点几伏,这是个不确定值) 以用来做KEY识别
! ~2 L: N1 z0 r' L8 ~  g9 V4 L( ^
" c  w: I3 ?: |$ C: b, l
: F# F$ |2 O0 r+ [6 p7 A
上拉输入模式
3 o/ w9 i4 w! w1 B 17.png          
6 U% C/ _+ U. y  z IO内部接上拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为高电平  如果I/O口输入低电平,那么引脚就为低电平,MCU读取到的就是低电平# x$ E! {2 S! T/ f% d7 }& d' Q

+ f8 e  @: j* K) W- j, V
  F! J4 t- u( Z! A# L9 j1 J
STM32的内部上拉是"弱上拉",即通过此上拉输出的电流是很弱的,如要求大电流还是需要外部上拉。) M* e" E- v, t' V; |( U
: ~3 ^1 Y- J& S+ S" |2 i
3 O5 S8 \, A6 r  [" {
下拉输入模式
: \% e  H" x6 ]/ F4 S2 J 18.png      1 @) j3 d5 U' q/ X+ C
IO内部接下拉电阻,此时如果IO口外部没有信号输入或者引脚悬空,IO口默认为低电平  如果I/O口输入高电平,那么引脚就为高电平,MCU读取到的就是高电平! V; h& j) Q2 X- `( T" F
' W( ]& L9 A: J# u( V( l
模拟输入模式  J. {, f, N( h
19.png          3 H* k2 R! Y# Q7 m5 |5 q4 }$ S
当GPIO引脚用于ADC采集电压的输入通道时,用作"模拟输入"功能,此时信号不经过施密特触发器,直接直接进入ADC模块,并且输入数据寄存器为空 ,CPU不能在输入数据寄存器上读到引脚状态
- z' ^8 R, \2 o' M/ F1 ~  F9 l5 w: h
2 u( Z, S8 Y$ {' y
& i* }6 K3 W4 `. f" G
当GPIO用于模拟功能时,引脚的上、下拉电阻是不起作用的,这个时候即使配置了上拉或下拉模式,也不会影响到模拟信号的输入输出  w  G, g3 a: Z. _
, O* j  W. W9 u2 {& X8 n3 |
1 {0 M& h0 e+ m% T& G4 w- d
除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式,+ ]# V, H& A5 ^4 }: n

  t3 }% x3 i! n0 t2 W2 Z3 {9 ^
& }( P8 J3 E; F5 J+ h& M' N# s
开漏输出模式(带上拉或者下拉)5 E- g% s1 a; ~7 v1 {; _
20.png
9 L) T0 Z- O0 z1 g- w  q在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1时,高电平,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用,此时I/O端口的电平就不会由输出的高电平决定,而是由I/O端口外部的上拉或者下拉决定   如果没有上拉或者下拉 IO口就处于悬空状态- Y4 v9 j& L- ?( Z$ V: w

5 s, D, ^% B9 u* b3 z6 `; J
9 ~/ \8 y3 P$ j! ?+ C: w/ a
并且此时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。,I/O口的电平不一定是输出的电平     }$ w: I* t* ]" @# L# f
6 ~) w' w& m0 c0 U; C8 x4 c

* L$ W7 r8 K. ^1 T  A2 e: M推挽输出模式(带上拉或者下拉)
8 {0 t4 ^8 z- t8 ~* U9 n* n9 r 21.png
6 L$ T" Z8 V5 A. j3 Z) N( J在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,I/O端口的电平就是低电平,若控制输出为1 高电平,则P-MOS管导通N-MOS管关闭,使输出高电平,I/O端口的电平就是高电平,  外部上拉和下拉的作用是控制在没有输出时IO口电平
- A4 _" }0 _; F) P/ z, J  a) u2 x, i: G; g* f

+ w  u$ s% F1 a$ {0 V* E此时施密特触发器是打开的,即输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态。I/O口的电平一定是输出的电平   6 T. M+ x5 p! o* |1 j7 y

& X3 e8 b; L4 L! i/ Q0 ]% g
0 F9 }) A: O7 F  o
复用开漏输出(带上拉或者下拉)
- e, h8 c. m" f5 M4 A; s 22.png
3 k# w" W4 J5 U- i4 XGPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效;  输出的高低电平的来源于其它外设,施密特触发器打开,输入可用,通过输入数据寄存器可获取I/O实际状态    除了输出信号的来源改变 其他与开漏输出功能相同
6 A# x( c7 D0 d! Y. f) _1 {9 Q0 s& J

: A+ j1 F) r" V/ |, T* v/ D" `8 p复用推挽输出(带上拉或者下拉)
1 ]$ W0 n  G. v* R 23.png                           
1 C; O4 A0 s+ o  q$ {# U; I4 RGPIO复用为其他外设(如 I2C),输出数据寄存器GPIOx_ODR无效;  输出的高低电平的来源于其它外设,施密特触发器打开,输入可用,通过输入数据寄存器可获取I/O实际状态    除了输出信号的来源改变 其他与开漏输出功能相同
8 T1 C! S1 W% I: C" Z$ `6 o' i4 k) s0 I$ \  U* M: D
开漏输出和推挽输出的区别:0 J& r$ |9 d1 \( c% f
" ?: _6 x. R+ C: M6 U. q
* y" f) w& s8 Z+ p% n3 @* }3 ~
推挽输出:0 a( i; S, `9 v/ F# P
9 a' U: V. m/ R# L/ _( ~' m, d. d1 P- ^
; r# B6 Z! B9 S% @
可以输出强高低电平,连接数字器件
1 s; |2 s2 O4 y/ U! O" I
! {3 B2 U2 Z' I) d) O
: R  G1 V4 b2 C1 y: r
推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.# o( Z) Y0 C4 @4 ?7 R; w/ ~

/ b3 ~( G" |5 u
" r7 P+ @+ U# p1 K; S; k6 v
开漏输出:
# `4 f! z0 h* w: r$ ?* |+ }5 Z  b; }" Z% l3 [
2 ^/ X& r9 u0 k
可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极. 需要外接上拉电阻,才能实现输出高电平  合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);
6 G4 x+ o- m5 R, E% c- Z
/ S% j7 X8 f1 B, a

1 H9 K# t6 m, K1 S. c2 C在使用任何一种开漏模式时,都需要接上拉电阻,否则只能输出低电平
  ^6 t4 U' _% `# M* E5 u1 B 24.png 3 K2 I& d6 ~) \" m& {
推挽输出电路: 其中IN端输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当IN端输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平   5 ^# j# U# {  B+ W' J2 \& `
% z+ q, g' x, g- e
& j2 {4 ?/ o" B5 [! t! M: e
开漏输出电路:IN端输出低电平时,三极管导通,使输出接地,IN端输出高电平时,三极管截止,所以引脚既不输出高电平,也不输出低电平,为高阻态。为正常使用时必须接上拉电阻,
# }8 j, m4 D7 ^2 B2 h9 A. ]4 J, W% q! T& l! g. M1 b; W
2 t! u6 N1 r2 r' F8 p$ N) n
在STM32中选用IO模式:6 @  y, V! ~! o$ t3 p4 G, X
8 H1 d" Y0 t  f% q5 K/ q( I$ u3 ]* S0 f

9 M0 T( c) k) D 上拉输入、下拉输入可以用来检测外部信号;例如,按键等;# Z/ n& v, ^% g! |- X6 l. u% U/ R
模拟输入 ——应用ADC模拟输入,或者低功耗下省电
0 T5 Q% [4 M+ O; q开漏输出一般应用在I2C、SMBUS通讯等需要"线与"功能的总线电路中。
: K9 M0 ]. k. o 推挽输出模式一般应用在输出电平为0和3.3伏而且需要高速切换开关状态的场合。在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式。
% X# K; F% W  G1 X6 ~6 y# Y复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)$ q( n8 h) m4 G1 O( J! P
复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
2 l* U( U# c* y) A! IF4系列与F1系列区别:
! \( N" ^# o0 T; T  n/ P本质上的区别是F4系列采用了Cortex-M4内核  而F1系列采用Cortex-M3内核
# {2 i' Z2 o* j# k2 g) p. R7 R1 M5 B! u6 U7 X
- W; R* Y, Q+ g
F1系列(M3)IO口基本结构:: \) H# l" Y4 W( O
25.png
$ z% a4 ^  @3 [, S0 |* C& s9 _F4系列(M4)IO口基本结构:6 q  F5 o, ~/ Z
26.png / u  I2 w, Q2 x2 G3 E3 Y9 i
F4系列设计的更加高级与人性化,他将外部上下拉电阻转移到了输出/输入驱动器外部,使得输出模式下也可以实现内部上拉与下拉,方便了用户的使用,增加了灵活性1 g7 s& q0 Q5 A1 K7 g
8 Q1 Y2 S, }7 g
GPIO的初始化(F4)
5 w9 D/ [2 D3 B& K这里我们以初始化LED为例: Z  i  `5 Z4 l9 ]
0 q4 m# U  L. N+ a# f
" h( O3 S( P% H# o
1.定义一个 GPIO_InitTypeDef 类型的结构体
, o; X" v% h  f& T/ X7 r; \, n
  1. GPIO_InitTypeDef GPIO_InitStructure;   /*定义一个 GPIO_InitTypeDef 类型的结构体*/
复制代码
一共有5个参数
' ^+ ^+ N* q  q/ s1 E' } 27.png $ U+ t& G/ ?! j
2开启 LED 相关的 GPIO 外设时钟6 s( U2 ?3 I% |5 R
  1. RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOB, ENABLE);     /*开启 AHB1时钟*/
复制代码
   Q:为什么要设置时钟?
3 S. Y- _& \: I) |# X8 ]" I2 ]4 R
" W- s) X5 ^1 C
    任何外设都需要时钟,51单片机,stm32,430等等,因为寄存器是由D触发器组成的,往触发器里面写东西,前提条件是有时钟输入。stm32是低功耗,他将所有的门都默认设置为disable(不使能),在你需要用哪个门的时候,开哪个门就可以,也就是说用到什么外设,只要打开对应外设的时钟就可以,   其他的没用到的可以还是disable(不使能),这样耗能就会减少。& |8 f3 ~6 H" M6 F  f/ ?
$ F# C& B0 C* x

. V3 T2 s2 Q/ F$ n& k1 GQ:为什么 STM32 要有多个时钟源呢?  ~6 z, \7 i$ m3 \

! u7 J$ t6 P2 h% C+ d& A9 h

; Z- @) F$ Q) q: s  i8 Y因为首 先 STM32 本身非常复杂,外设非常的多,但是并不是所有外设都需要系统时钟这么高的频率, 比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁 干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。
% D/ q& y# T& b) ?' j) G8 M5 e
; Y% v) }( x6 ]4 p- H& |8 f% k1 o/ [- i" V7 G

2 x6 ^& N7 i; X# ?6 k- x而相对应的外设功能所使用的时钟 在stm32f4xx.h 中即可查看到) e7 m4 k, P* v# D0 k4 M8 Z( v
7 g$ a) J3 D9 Y2 M
) F9 T8 J: U- B8 B3 t& B" V& W6 b
RCC_AHB1/ p! |# U& ]% d/ N  b  l8 B8 f! t
28.png ; x$ d7 ^: r% X7 J& H& p
RCC_APB1! {, R* M9 S" d* R
29.png
( Y; H" j6 d$ }' |9 R) u" @( s, \3选择要控制的 GPIO 引脚
# o% P+ T; n" a; a  e# K) R
  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  /*选择Pin9引脚*/
复制代码
可选引脚为0-15 一组IO口有16个引脚( m; Y* \( t- V# u  P3 y( P
30.png
- C$ e( D& i9 Y; }4 N6 h" T, Y4设置所选引脚的模式
6 W) O0 L1 Y' O
  1. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;   /*设定为输出模式*/
复制代码
引脚的模式共有四种,分别为输入,输出,复用,和模拟模式& b; X  }4 _6 k  m& F
31.png 6 [. y! d3 D% ]" H" Q3 Z( e
5 设定所选引脚的输出类型. a3 ^. |# ]- o9 B( ?4 |7 v; K
  1. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; /*设置引脚的输出类型为推挽输出*/
复制代码
输出模式有两种:推挽输出和开漏输出     A: h$ P3 Z1 m, x
32.png
# _; w1 Q4 o, J6 ^8 c2 }只有输出模式才需要配置,输入模式下不需要配置
2 S3 }! S5 J8 I& B0 _3 |7 a- a0 P, E

# U9 r; C: n* N" f9 z" b# X( t6 设定所选管脚的速度0 Z& E/ p4 H  a+ C) |* a2 Y+ w
  1. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//设定速度为100MHz  高速模式
复制代码
33.png ' D7 V+ s. q7 U; Y
7 设定所选管脚的上拉与下拉
4 x2 A/ R9 f8 b# e) [. _, @
  1. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; /*设置引脚为上拉模式*/
复制代码
可设置为:上拉,下拉,与浮空
% d; H! r& l3 E8 u- I6 m1 z: n4 a 34.png
0 b5 }% k2 W% n8初始化GPIO
1 ^' x8 o4 g* _9 Z+ L2 r& z
  1. GPIO_Init(GPIOB, &GPIO_InitStructure);    //初始化所设置的引脚
复制代码
GPIO_Init() 是官方配置的初始化函数  第一个参数是GPIOX 第二个参数是结构体所对应GPIO各种参数的配置
- w9 `9 `, E4 }: @9 y9 {) G' a; \3 D* o6 \; X
GPIO的初始化(F1)
& R( t  v9 }+ q, YF4的初始化相较于F1系列有了很大的改变,在配置F1系列时,结构体只有三个参数  ! `, o7 p) ^4 ~3 u8 B
# q1 L- u4 s, q9 Y) H6 l, a- n
' O& r$ S6 W! Q2 `5 V
GPIO_InitTypeDef 类型的结构体9 }5 t7 _  [- q6 B9 G% J! m. z
35.png
$ }2 b) m  \. [9 K所选管脚的速度
- ^9 y' w/ r$ E9 Z 36.png
; P. o) d& M" N* y; L( X所选管脚的8种模式
4 P4 ~' v! D; L/ F0 A 37.png
; ?' W8 L- v9 ]4 P# ]区别:+ V. Q3 b' m8 K# e& x# e! I  u

- C9 o+ ^% o& }+ M! e& X3 q

" D& S  E# N* l* j% X9 @ F1(M-3)系列管脚速度只有三种模式  并且管脚的模式配置八种模式全部都在一起定义,直接设置即可3 q' {$ f( L5 g8 B. G# M1 n+ x  Y
- I% t" o) }1 r6 s/ U* L

* r6 M+ O) h: S! B4 }1 z4 ~3 X总归还是大同小异,不做过多介绍,看下下方配置即可$ ?) @: S! L, ^3 k6 l, k+ L5 |
  1. void led_init(void)# G0 T5 h0 T5 r, h& e) o& ?
  2. {
    ) e5 ]0 v5 C" B7 n& W* K
  3.         GPIO_InitTypeDef GPIO_InitStruct;                    //定义初始化结构体
    % V, j  m, X' K, S% h( u
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA时钟2 F% b- G+ x) D9 e! Z; r
  5.           K2 d! P# V! x% {  @) U
  6.         GPIO_InitStruct.GPIO_Mode    = GPIO_Mode_Out_PP;     //配置模式
    ' P  U& g/ U9 f- H3 a3 v7 |
  7.         GPIO_InitStruct.GPIO_Pin     = GPIO_Pin_0;           //配置哪个IO口
    & p* a8 s( U2 K
  8.         GPIO_InitStruct.GPIO_Speed   = GPIO_Speed_50MHz;     //配置IO口速度,仅输出有效3 O1 p6 M+ H" B# C
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                   //初始化GPIOA的参数为以上结构体
    ! z  [# p# b0 C+ }5 F
  10. }
复制代码

6 J  q# @! G* O: u9 ^. v: v5 ~- L8 Z! F) \! ?. L9 `

, \% z( c/ L  g) S" `! s; @: ^) ~, L
收藏 评论0 发布时间:2021-10-12 14:15

举报

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