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

【经验分享】STM32F103:定时器中断 time——通用定时器TIM3使用

[复制链接]
STMCU小助手 发布时间:2022-5-3 22:25
一、STM32F103定时器
% l, h6 N$ ]! Z9 Y+ H/ H* g6 F/ \1 D/ M, \( k2 A" H  K/ L
U}CZ4YCWOWR(@]TXY~F3~X8.png
& F: D+ N* |( P* w& o$ L9 a& ?( F" E( T
二、STM32F103通用定时器
( E6 h9 C- [6 o) g5 T/ q1. 主要功能
  y2 ]5 O/ H  j0 E. K  ?' B通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:
# L! Y1 r3 j6 e位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上);$ W+ R3 q5 Y+ {, S6 M5 x
16位向上、向下、向上/向下自动装载计数器(TIMx_CNT);6 j% s" k5 {1 p& _
16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65536之间的任意数值;
; T2 y+ @: Q. `9 }$ b4个独立通道(TIMx_CH1~4),这些通道可以用来作为:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出;
+ @$ a5 O- j6 k使用外部信号控制定时器和定时器互连的同步电路;' z" z* C3 I+ M/ s+ c: L
如下事件发生时产生中断/DMA:更新(计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发))、触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)、输入捕获、输出比较;
. Z/ Q( W3 x& v: A6 s7 B支持针对定位的增量(正交)编码器和霍尔传感器电路;; A1 _# y0 c' T- s- V7 R3 s$ E1 [$ B
触发输入作为外部时钟或者按周期的电流管理;$ I3 v2 `+ W( L* s! n2 v: T6 N9 a
每个通用定时器都是完全独立的,没有互相共享的任何资源。* a6 Y, t  [" ]
2. 时基单元" V. ?% G) r- x  B, b
时基单元包含:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动装载寄存器(TIMx_ARR)三部分。
% p/ |8 s! X  G对不同的预分频系数,计数器的时序图为:
' r( S: V  H- j# G% n( [, G& K. Y* p) h( V' c2 {
PKN[$BDPFW_036PR61X}}BM.png & y& X( K8 Y; D4 J! G: `
: j  w' V( ^4 N" v' f6 p
3. 计数器模式
- B& T( j' o) x$ d6 B+ Y向上计数模式
3 q" w. ^- }0 o7 x, R" |: b" |2 C- R# s7 K( P
B}RV2~$HAMFD[ZPC(1TE12K.png 0 ~! \8 \- ~+ r3 ]' i) l9 I
& C0 v( {' g% p! E1 ]9 F
向下计数模式, t6 B, T4 u; B8 `' `- [
, n6 S/ U9 I3 W- W! }; R# G
XB$CGMBDRM747}6~2TZ1Y9Y.png 5 g1 `4 W- j6 Y; e6 \4 \( a

. k, N$ p! \( |- B中央对齐模式(向上/向下计数)

2 W0 _/ t! C4 j* r4 m- X2 r
2 E9 x0 M' m& `8 a* ^- t _R~%{0NJ5~{PU98ND0P[XK0.png ( p$ C( I2 R  _  E; `1 x

& m6 F& {4 L* f4. 时钟选择
7 W, K9 ?1 a/ k/ W3 D) q2 ~" p2 P计数器时钟可由下列时钟源提供:
) Z, g4 R0 Y3 [" ~1 F$ i" c6 V4 l- s  K) j% m
内部时钟(TIMx_CLK)& K/ Q( ~' n, {. D
外部时钟模式1:外部捕捉比较引脚(TIx)
0 K. Z) i/ o! n( E- y& s外部时钟模式2:外部引脚输入(TIMx_ETR)! [% @- o, R- ^+ ?9 V
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
' j: l) I% d+ [7 F
7 y) h9 l7 u7 h内部时钟源9 ]+ D5 D9 L( Q3 i# Z! {1 y' @
, ^( |2 O' Y9 u6 {$ @2 n+ c0 k
%~`O]HSK8Q74}2%I_HVQ_AP.png
. H# Q. j3 X4 U& C
. T( R0 W2 p, ^! {0 K. r: w* _从图中可以看出:由AHB时钟经过APB1预分频系数转至APB1时钟,再通过倍频器转至TIMxCLK时钟(即内部时钟CK_INT、CK_PSC),最终经过PSC预分频系数转至CK_CNT。
( F1 w: q& u0 T: ?  V7 G+ L( f) \6 p
当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;
, P' q/ C9 f, L+ w4 H, c当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。0 b& [& [: k6 K

  _, ^5 s. x% E, ]4 r7 ]# t8 _默认情况下:; V) l2 n7 U( ]; R! d! f
AHB总线时钟——STM32F103是72MHz,APB1时钟=36M。/ p; Q1 M, L& V7 J0 L' G
所以APB1的分频系数=AHB/APB1时钟=2。
2 [, ^0 Z. d4 o通用定时器时钟CK_INT=2*36M=72M。/ y0 \$ K7 t# }
最终经过PSC预分频系数转至CK_CNT。( M3 t1 t- g6 T

0 n# j8 E/ R: ?" x% ~: Y9 ~- k时间计算- p8 m+ C% c; F8 j; I0 Z: w
Tout= ((arr+1)*(psc+1))/Tclk;/ U5 e: o. H# O' a- u
Tclk:TIM3的输入时钟频率(单位为MHz)。
: E$ j9 _, o6 ^; I8 O  QTout:TIM3溢出时间(单位为us)。
* r/ W- g; a' g; ~例:计时1s,输入时钟频率为72MHz。3 P, v; S6 z" O4 [' ^
  arr = 9999,psc = 7199。
4 O( ]* ^7 O% s2 x5 ]! E  Tout = ((arr+1)*(psc+1))/Tclk = ((9999+1) *(7199+1))/72=1M(us)=1(s)( n$ J* ]5 a* R5 S. x, J
' q; ^: g, J  ?! |! c2 u
H_007WUT62FXL2JQ7VKEYGN.png
: J1 q' k. q$ h; F# S7 x: @3 K
5. 相关配置寄存器  {! c7 F( n# y  g0 B4 [
计数器当前值寄存器(TIMx_CNT)
/ ?+ V6 |. C* Z. M% b
2 t, {: i5 T- B0 ]- y$ R/ w7 T
7@JWBF5XPB[1BWFH9VZOAD2.png ! n) Z+ p7 g. L  E  u
& h: q+ q, B$ M. C
预分频寄存器(TIMx_PSC)$ Y, z2 D2 S4 d2 C) G4 M  r9 k

! N" D$ J; c" p- ?* T; U$ d( ~0 _
W$]]{%OED6{AFRCM6LGD]IT.png ' u' E/ r  J! K$ i

" O; o4 O; G: C. o" `5 e自动重装载寄存器(TIMx_ARR)
+ [: i$ t( c% |# U# d9 J
" W2 u* h2 u& @, s" _# u
V_QT0)X_}_J%$YMRMF$H.png & W# k3 g% c+ W
/ x* m$ B7 j2 ^0 p' H- C" D$ z
控制寄存器(TIMx_CR1). s. ?- u' M% \3 x  V5 e; I

, o4 M4 h9 M( Y* Y- E  l
~[6WPBO~LMO0OMW5_]ZL.png
  H2 ]" n/ S  a) S: G$ u6 F' k
6 p( I! V" k2 h6 ]4 ? ]T$BA}P]8K$ZY[~17F5A{GC.png
9 K5 a4 s( ~# j2 Q7 M1 ]& S
1 ~# |3 N  G! R; dDMA/中断使能寄存器(TIMx_DIER)
, z; o# u- b; Z8 b+ L4 Z
1 n) S8 u) ]& z }6$MI-@RO7W@M~K}KX%{C.png
3 Y( i! ^. w2 i
8 @. T0 Z7 j& U$ k! _3 |2 }' ?/ U ZO}RIM8%({YU2[9QSX}[Z_7.png   h0 j" o$ P5 ^7 I+ }+ Z; `
7 j% R' p2 u' Y+ e0 U* y( X
三、编写定时器中断——time/ _& d: ]$ J4 B9 t  D3 }* D) A: Y! k" {3 D
1. 相关配置库函数
( q( p8 f( T6 z: q. L7 o
1个初始化函数) H$ s/ _9 ~+ y
  1. void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
复制代码
- ^3 O/ r/ l, ?& A4 o8 j6 A
作用:用于对预分频系数、计数方式、自动重装载计数值、时钟分频因子等参数的设置。
; q' U1 }/ |/ g' h
* W9 D$ s4 X, Z( p5 h3 z/ D2个使能函数

- M4 r/ R7 E4 ]5 @; d2 w
  1. void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);        //使能定时器4 x$ s2 a. y; `6 ?1 c0 @5 b
  2. void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);        //使能定时器中断
复制代码
+ ]0 c! I5 J  }, S' B6 ]5 f
4个状态标志位获取函数

, y" o8 f: w2 m- d7 r4 O; x' l: ^
  1. FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);//获取状态标志位
    0 k1 v9 @1 ?& b; U8 W
  2. void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);//清除状态标志位
    , s) A& ^0 i3 a1 K# G, \
  3. ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);//获取中断状态标志位
    8 S5 G" Q$ b  O1 s9 x( g
  4. void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);//清除中断状态标志位
复制代码

+ F. T, ^6 U/ V0 R8 ?/ J2. 具体步骤
- `$ c- d+ }% H4 |; n7 \6 g1 h
1.使能定时器时钟。调用函数:RCC_APB1PeriphClockCmd();
* Q  D! w3 V) g  p2.初始化定时器,配置ARR、PSC。调用函数:TIM_TimeBaseInit();
0 w$ A. k. R2 Y( T3.开启定时器中断,配置NVIC。调用函数:void TIM_ITConfig();NVIC_Init();
: l- X6 z: A- I) |4.使能定时器。调用函数:TIM_Cmd();1 X/ Z5 t! s2 T6 N2 }' _
5.编写中断服务函数。调用函数:TIMx_IRQHandler()。
# l* p* u* K/ g2 W! G+ F/ F, |5 d3 w3 w7 ?6 N8 [% [/ V; w: Z
3. 具体程序
) I" R$ x& K: t! m$ C% t. gtime.h
! B! u1 O( s; m) }2 F1 L
  1. #ifndef __TIME_H
    # d# [' g/ F0 N4 {
  2. #define __TIME_H         5 H+ U; d+ N4 e
  3. #include "stm32f10x.h"
    5 h  _2 T  u: Y, C: c
  4. ! A$ x2 N! h* x7 ^- X# K; [: ]
  5. //创建一个时间结构体
      P0 s- k( V0 ^2 A1 j- X! A
  6. typedef struct
      \* V* `6 Q3 _) ~  W
  7. {" W* e7 y- }6 ~5 [: q& z7 d5 \
  8.         u32     Tnum;) I+ u( X& \: N  Q+ Y1 J
  9.         u8                T100ms;  v+ z' O. R; e- s( {1 A
  10.         u8           T200ms;) R: O0 a; l9 Q
  11.         u8           T500ms;
    3 Q8 i  g/ x* ?' W
  12.         u8                 T1s;! A- `( G3 d' n2 j. h# H
  13.         u8                 T5s;( d' L9 D# j1 \- x4 T8 O3 L
  14.         u8           T1min;
    % Z) U1 D: D0 t# y) t
  15. }TIME_t;0 a9 K0 G! O  [3 R

  16. 0 T( n) Y- J1 z6 i% q: u+ [
  17. extern TIME_t TIME;                //将时间结构体变量设为全局变量  ]$ J* R7 O  G

  18. - B$ _4 S4 L' o8 m$ l7 L" C% Q
  19. void TIM3_Init(u16 arr,u16 psc);
    $ k5 Y% c3 X. u4 p/ n, ]* C7 o# t
  20. 0 X+ J3 n% d# U* t' ?2 [! R
  21. #endif
复制代码
; X3 B  q2 o; T8 I, @$ v% R5 U
time.c

( F' V5 r3 ~) T0 W7 W2 h
  1. #include "time.h"
    % |2 y4 h2 E) ?, o2 I" z$ P: [
  2. & r% ?9 u1 d2 ?3 v. s. q) i
  3. TIME_t TIME;
    4 \( L! k0 C# f' o2 w3 o6 A& ^" {
  4. " S  }4 d4 R0 H; U5 Q  k
  5. //通用定时器 3 中断初始化8 D9 i2 |' O9 N4 d
  6. //这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M
    : M! t6 D% E  x1 v
  7. //arr:自动重装值。
    ! n2 x6 s4 G7 X- \0 }% T( t; C
  8. //psc:时钟预分频数3 _2 {' v. ?5 D9 N- l* e  G5 p1 H! z; m
  9. //这里使用的是定时器 3!
    . Z1 |) Z% ^% L8 V! p
  10. void TIM3_Init(u16 arr,u16 psc)7 F) y% J( [# A3 ^
  11. {
    # Z8 i  Z- ?6 d! z! h: Q; C9 z
  12.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    # n+ c6 w9 k. i5 p+ i3 ^
  13.         NVIC_InitTypeDef NVIC_InitStructure;2 c+ `3 X+ o* L0 B1 G& z
  14.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟 TIM3 使能
    ! V) v' c6 N% d4 ^: V; F
  15.         //定时器 TIM3 初始化( t8 V1 V% W4 ^" A  s7 t
  16.         TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值8 q5 N& l) z) y8 X: A3 I
  17.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
    , C8 p7 l& q# H
  18.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割6 a  o' E9 Y# @# G
  19.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
    ) E7 [# t& P- y
  20.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  //初始化 TIM3
    5 {. {0 Y% y0 k: z8 Z
  21.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );  //允许更新中断7 J2 P& H* q/ o. d4 f' n( y2 S
  22.         //中断优先级 NVIC 设置! i, F# y# X7 ?; Y$ q. V, o8 v
  23.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3 中断
    " T6 L7 a9 H  B6 h/ h! a4 _
  24.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 0 级
    3 @" Z# _$ B- ~* \
  25.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级 1 级
    ; y2 @$ |/ k4 f% P
  26.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  //IRQ 通道被使能
    / ^4 A% N% ]3 I5 Y4 v
  27.         NVIC_Init(&NVIC_InitStructure);   //初始化 NVIC 寄存器  ^. n4 ]; [) c& a+ R$ l
  28.                 : {+ D$ }) w- _
  29.         TIM_Cmd(TIM3, ENABLE);                  // TIM3) {. r/ q, c9 F8 T9 D9 U3 b  q
  30. }; S) P" S5 q8 G
  31. 7 x/ g5 y  A3 B* s5 h7 p& M0 N! G
  32. 7 z( c( a8 f4 y0 ~6 ]; L4 }8 U; M
  33. //定时器 3 中断服务程序
    5 |/ B5 _- W; s9 W
  34. void TIM3_IRQHandler(void) //TIM3 中断
    , v+ Y: S% v! G2 [
  35. {; R' v) p, H* h& M$ Y
  36.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查 TIM3 更新中断发生与否1 v; R# h/ a, o7 N  b
  37.         {! V+ m. @: g: i$ H
  38.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除 TIM3 更新中断标志
    * J* V2 A% ]8 c( e# D
  39.                 //每100ms一次。          r9 R0 g' V* i) V# s' }# O9 b* z
  40.                 //这里可以编写功能程序+ q, u7 `8 \" c' }% K& a- b
  41.                
    6 y) Z9 B, i5 ^
  42.                 if(TIME.Tnum>=24*60*60*10)        {        TIME.Tnum=0;        }        //一天的时间清零一次# i9 ~/ E0 E2 t
  43.                 else                                                {        TIME.Tnum++;        }1 R. }# Z, {0 |5 {3 m
  44.                 TIME.T100ms=1;
    ; [9 B9 B! B9 X  R, W: @* L
  45.                 if(TIME.Tnum%2==0)                        {        TIME.T200ms=1;        }" N# @/ G, N' ^2 O4 R" `( C% y6 h
  46.                 if(TIME.Tnum%5==0)                        {        TIME.T500ms=1;        }( E; T2 T8 \0 U) O) ]+ g
  47.                 if(TIME.Tnum%10==1)                        {        TIME.T1s=1;                }
    - s' C" n, K6 m  Q4 E1 R
  48.                    if(TIME.Tnum%30==2)                        {        TIME.T3s=1;                }2 @! |2 F$ X) u/ Z9 J
  49.                 if(TIME.Tnum%600==3)                {        TIME.T1min=1;        }/ g! }; S, }* u- D8 V
  50. ) Z( x3 R! W& v% ?$ W- a
  51.                 //在中断中执行任务,优点是准时,缺点是容易打断其他任务,不建议在中断中执行任务,可以在主函数中执行任务。$ {- V  g/ p6 w2 h% B& F8 s. f
  52.                 if(TIME.T100ms==1)# Q6 L  K1 z% Q7 @) U, `
  53.                 {8 _. N# b) E3 `- B! @
  54.                         TIME.T100ms=0;: Z1 o* q( M8 s
  55.                         //100ms要执行的任务# _5 M  G  A% }9 k( A! Z4 y0 ]
  56.                 }
    , Y0 u+ I& P% Z* d9 Q6 S
  57.                 if(TIME.T200ms==1)
    2 t3 z* M6 P4 T" _
  58.                 {
    ! c8 |2 E, V: t. s
  59.                         TIME.T200ms=0;* @- O4 N$ i$ J' Q& K" Y: u
  60.                         //200ms要执行的任务- G; K  F; j# i4 V; z* j/ r/ ?( z  o
  61.                 }. H' F: w- _0 C- V' b
  62.                 //。等
    & ?% J7 V* Q0 a; a7 C' Z. _1 \
  63.                 //。中间省略
    4 B# `/ Q* M0 F% z3 P
  64.                 //。等" D! l2 m1 z6 _8 q" r' W+ p& e* V
  65.                 if(TIME.T1min==1)0 T, |1 h3 ?! w( T, X  J
  66.                 {3 C+ Z0 F& t: @1 B6 \$ Q$ z% l
  67.                         TIME.T1min=0;' v  [* h3 q7 p  g5 F
  68.                         //1min要执行的任务# f/ T! M* `5 z. [/ i+ ^7 l% \
  69.                 }$ r! j1 e" m! B% w' n, m1 W
  70.         }" Y' L8 W* T! v, S9 Z1 X# m
  71. }
复制代码
& R! l8 a8 U" }& b2 \5 C
main.c
- c4 k8 t9 q% q6 I$ a. Z9 v- o
  1. #include "stm32f10x.h"
    1 f7 k8 F) q) i3 e1 U3 z
  2. #include "time.h"% Q0 f3 R3 r; p/ q: p6 G0 r

  3. : p/ j8 H# U7 e2 Z) r6 V# T2 e  }) Y
  4. : }, ~9 `5 ?% z3 K
  5. int main()4 ?% ~  o- J" x0 D! `; |" `
  6. {& A) Y& z0 L" m( B9 P
  7.         /**
    8 v+ ~4 c! i% S& o2 N$ ~( h
  8.         其它初始化省略
    : M+ A! H- Q' f* D" i7 ~
  9.         **/5 {+ q/ n5 E+ _( A8 S5 A; G
  10.         TIM3_Init(1999,7199);        //10Khz的计数频率,计数到1000为100ms) v3 Q5 }5 o1 p4 I
  11.         # X6 Y: e$ ^- Z, i2 p( o$ v
  12.         while(1)
    0 N( ~: c1 v; {% q
  13.         {
    % ]7 z8 N: z# ^  O$ s$ A# C
  14.                 /**
    $ k' ^9 T) @  S5 s) g& P
  15.                         其他功能程序
    * C1 s' i7 X# V- l
  16.                 **/
    ( A8 ]7 o2 o7 Z6 [( t7 q; Q3 s1 Y
  17.                 $ O4 @; b- f0 Q7 Z' G/ e
  18.                 if(TIME.T100ms==1)
    9 k  V; G+ _3 E, B( `$ N
  19.                 {
    7 {$ h% t( S( o, N; c
  20.                         TIME.T100ms=0;
    4 x: w9 F3 |$ z% K  @
  21.                         //100ms要执行的任务. z3 F) x5 ]3 |3 ~
  22.                 }
    ! a+ V2 o6 p, n; t
  23.                 if(TIME.T200ms==1)2 m5 y- W# X8 B1 N
  24.                 {0 H% w3 K; P; F
  25.                         TIME.T200ms=0;
    # D0 F, m+ Q( o2 b
  26.                         //200ms要执行的任务- [' Z$ `- H5 p# f# R% T1 m
  27.                 }
    , C5 j+ }- M2 O1 j3 d
  28.                 //。等% e0 @# v1 l' q% h& \
  29.                 //。中间省略; {# }, \2 r) I3 o9 ^
  30.                 //。等
    0 i7 z8 s! [. T2 b
  31.                 if(TIME.T1min==1)
    0 L6 H8 D, g' Z- J! V
  32.                 {* `! J/ t" k9 y0 S& d" E4 ?1 h
  33.                         TIME.T1min=0;
    : d: a; e! S% ]" \" O: S& ?! `
  34.                         //1min要执行的任务7 }2 I5 f- u: L7 P% Q
  35.                 }
    9 t0 u; f5 j# X" ~' W
  36. + K# `3 t8 O6 f5 S; u; p1 X4 |2 I
  37.         }
    4 j. {. H2 b1 A$ B- h) x# \
  38. }
复制代码
: h2 y+ t7 s. I% f4 I
7 G% b2 j1 t6 ]; R9 @' f

) ~8 l4 Q# Z$ w" f+ f1 S
+ `8 }, ]2 ^. T6 [, H. f7 Y# L
赞 收藏 评论0 发布时间:2022-5-3 22:25

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版