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

基于STM32(ARM)开发初级经验分享篇一

[复制链接]
攻城狮Melo 发布时间:2023-4-12 19:17
STM32,从字面上来理解, ST 是意法半导体, M 是 Microelectronics 的缩写, 32 表示 32 位,合起来理解, STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中, STM32 可以说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。

; C+ z) Y/ e" s8 s: _8 ]
51 是嵌入式学**一款入门级的精典 MCU,因其结构简单,易于教学。 51诞生于 70 年代,属于传统的 8 位单片机,如今,久经岁月的洗礼,既有其辉煌又有其不足。现在的市场产品竞争越来越激烈,对成本极其敏感,相应地对 MCU 的性能要求也更苛刻:更多功能,更低功耗,易用界面和多任务。面对这些要求, 51 现有的资源就显得得抓襟见肘。所以无论是高校教学还是市场需求,都急需一款新的 MCU 来为这个领域注入新的活力。
' m; O- }  Y% \" v

% _8 i! i, A- `% a7 t- n
基于这样的市场需求, ARM 公司推出了其全新的基于 ARMv7 架构的 32 位 Cortex-M3 微控制器内核。紧随其后, ST(意法半导体)公司就推出了基于 Cortex-M3 内核的 MCU——STM32。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多 Cortex-M3 MCU 中脱颖而出,成为最闪亮的一颗新星。
% [8 v& H. g8 C7 F2 |
STM32 一上市就迅速占领了中低端 MCU 市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。作为一名合格的嵌入式工程师,面对新出现的技术,我们不是充耳不闻,而是要尽快吻合市场的需要,跟上技术的潮流。如今 STM32 的出现就是一种趋势,一种潮流,我们要做的就是搭上这趟快车,让自己的技术更有竞争力。
- f5 T1 q7 m0 O) p
  • STM32 USART串口的应用
    " }. F$ v! E: d- f* v
USART:Universal Synchronous  Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。
UART:(Universal Asynchronous Receiver andTransmitter),它是在 USART基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是UART。
) ]' u7 c8 N' _9 n  x) U2 p8 K8 l' [
USART 在 STM32应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、指出运行出错位置等等。
. `  v1 k6 n) d9 t3 I! q
用户平时基本上用的都是UART,很多外设与STM32进行数据传送时都是用的UART。
" B2 P7 [% Q0 L
微信图片_20230412192036.png

0 j8 @. z2 ^( G; ~; a4 s
开发板与电脑对于电平的定义是不一样的,即对逻辑1和0的电平定义不同,因此需要一个转换器,和其他开发板连接时,由于电平一样,可直接连接。

' y' w% F: N' ?; @8 |8 P7 ^9 @
微信图片_20230412192058.png
" |! g' ]6 H. B& v+ g- X
串口通信协议介绍:正常情况下,没有数据传输时,两端的信号线保持高电平,要发送数据时,发送方向接收方发送一个低电平,接收方就知道对面要发送数据了。接下来发送方发送数据,两端约定好数据大小是8位还是9位,一般情况下是8位,紧跟数据位后的校验位和停止位。

4 S* F( v& ]1 ^
微信图片_20230412192209.png

. [) [: `3 Y% c/ Y) X! y
在串行通信中,用“波特率”来描述数据的传输速率。所谓波特率,既每秒传送的二进制位数,其单位为bps(bits per second)。它是衡量串行数据速度快慢的重要指标。国际上规定一个标准的波特率系列: 110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……
$ w! ^) D* X" y# J: z- W6 Z/ b
例如:115200bps、指每秒传送115200位。通信双方必须设置同样的同学速率才能正常通信
注意:实际的数据没这么多,还包括起始位,结束位,校验位。
  • 使用寄存器方法发送数据
    * G) S" z" `/ o' c! c! s% d) ~

+ v; h; W! a1 h/ n. C7 s6 P+ l
位7TXE:发送数据寄存器为空(Transmit data register empty)
当TDR寄存器的内容已传输到移位寄存器时,该位由硬件置1。如果 USART_CR1寄存器中 TXEIE位=1,则会生成中断。通过对 USART_DR寄存器执行写入操作将该位清零。
% A8 _" ~/ n4 z2 {9 x: M* b
0:数据未传输到移位寄存器。
1:数据传输到移位寄存器,也就是数据寄存器为空。
注意:单缓冲区发送期间使用该位。。
) z4 ?2 }) p9 C5 r
发送数据前一定要检查发送数据寄存器是否为空,为空才可以发送数据。
void USART1_PutChar(uint8_t ch){
   while(!(USART1->SR & 1<<7));//等待TDR为空
   USART1->DR = ch;//直接将数据扔给数据寄存器
}   
//第7位为0,与出来的结果为0,非运算之后为1,继续while循环   
//第7位为1,与出来的结果为非0值,非运算之后为0,退出while循环   

) X$ S  Y# ?& [7 J
  • 使用寄存器方法接收数据
    ! {+ |+ X2 U) s/ {1 Z

3 d' p  F# j$ M1 _/ m
位5 RXNE:读取数据寄存器不为空(Read data register not empty)
当 RDR移位寄存器的内容已传输到USART_DR寄存器时,该位由硬件置1。如果USART_CR1寄存器中 RXNEIE= 1,则会生成中断。通过对 USART_DR寄存器执行读入操作将该位清零。RXNE标志也可以通过向该位写入零来清零。建议仅在多缓冲区通信时使用此清零序列。
  x% X/ q9 }1 x: U1 v
0:未接收到数据
1:已准备好读取接收到的数据,即读取数据寄存器不为空
uint8_t USART1_GetChar(void){
    while(!(USART1->SR & 1<<5));//等待RDR不为空
    return USART1->DR;
}
//第5位为0,没有得到数据,与出来的结果为0,非运算之后为1,继续while循环     
//第5位为1,数据寄存器不为空,与出来的结果为非0值,非运算之后为0,退出while循环     
  • printf的实现:

    # U$ N: v7 J# T
  1. int fputc(int ch,FILE *p){
    2 D3 I0 |, T' i, |4 A
  2.    while(!(USART1->SR & 1<<7));% C' L8 U! S) E  v9 {
  3.    USART1->DR = ch;   
    ; E/ o0 T, ]7 L/ z
  4.    return ch;
    ) B( z1 ^: l- i* H" S
  5. }//实现原理参考上文
复制代码
8 F% B( X- _8 v9 y

. y6 H! \3 y! p2 @7 n9 W0 R1 _
  • STM32 中断系统专题讲解
    - v) b! r- K: ?( y- e

( p1 N' f( M0 X% Z( n
中断能提高CPU的效率,同时能对突发事件做出实时处理。实现程序的并行化,实现嵌入式系统进程之间的切换。

! N3 x% ]7 y! n1 ?- J; Q+ x
微信图片_20230412192315.png

' w2 I! E/ O- @5 i/ v5 Q/ T% _
微信图片_20230412191529.png

' |: R; Y7 m) p3 I- z9 A. c
  • NVIC(内嵌向量中断控制器:Nested Vectored Interrupt Controlle)的主要功能:

    4 ~2 ]! q- s/ U7 ^7 T
NVIC其实就是一个中断管理的部件,这个部件和其他外设没有区别,内部仍然是由一系列寄存器构成的,它的功能都可已通过寄存器的设置来实现。控制一个中断本质上就是操作寄存器。
4 W" }! \6 z5 ~! ?
1.中断管理
Cortex-M4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有256 级的可编程中断优先级设置。但 STM32F4 并没有使用 Cortex-M4 内核的全部东西,而是只用了它的一部分。Cortex-M4处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。
% A7 b& M5 C" o- E; t. z. ]4 y/ {/ ?
微信图片_20230412191537.png
1 m# a3 H) Z5 l8 G  ]" b. f9 b
注:
ISER:使能中断,8位刚好控制256个中断的使能,有些中断是不可以被屏蔽的。
ICER:清除中断使能,8位刚好控制256个中断的清除使能
ISPR:   挂起中断,若中断产生但没有立即执行,它就会被挂起(产生的中断没有当前正在处理的中断的优先级高就会被挂起,但是当前中断处理完成后仍然会处理新的中断,总之,有中断就会被处理)
ICPR:清除挂起,中断处理完成后应该清除挂起,表示已被处理完成,如果不清除挂起标志位,下一次CPU检查的时候发现该中断还在等待处理,就会重复触发,这不是我们想要的。也就是我们常说的清中断。
IABR:每个外部中断都有一个活跃状态位,当处理器正在处理时,该位会被置1
IP:用于设置中断的优先级,8位宽原则上可以设置256级优先级,但实际上STM32并没有使用到这么多,而是使用了高4位,低4位保留,共16个可编程优先级。

3 F8 p0 Z. H6 l  k
2.中断和异常向量表
Cortex-M4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断。STM32F407实际上只使用了10个内部异常和82个外部中断。当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。统一的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口。从发生异常到异常的处理中间的时间被缩减。

7 L( U& H- v% H9 r' z: f
微信图片_20230412191540.png

) j* L7 s& p( Y+ _
注:中断和异常的区别:
中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序。

& @3 ^) p8 B9 v& u6 F
3.支持嵌套中断:在执行一个中断服务程序的时候
当前处理器正在执行某一中断处理程序时,在执行期间有一优先级更高,更紧急的中断需要处理,会打断当前的中断处理程序,去执行高优先级中断的处理程序,执行完成后再继续当前的中断处理程序。

/ W# W% V, v' S& u
STM32有3个固定的优先级,都是负值,不能改变,值越小优先级越高,有16个可编程优先级,用4个bit位表示。

/ W1 Z. |3 @6 H4 K, q/ _! f' J. i
微信图片_20230412191555.png
! J3 A+ H5 A1 H
在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx(在 F407 中,x=0...81,即82个外部中断)用来配置外部中断的优先级,IPR宽度为 8bit,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高。但是绝大多数 CM4芯片都会精简设计,以致实际上支持的优先级数减少,在 F407 中,只使用了高 4bit。

! o9 Y4 y; `6 J* a1 A9 k3 u
STM32还会把优先级分为两级,一级叫做主优先级,第二级叫做子优先级,主优先级又叫做抢占优先级,子优先级又叫做响应优先级。比较时首先比较主优先级,主优先级高则优先级一定高,主优先级相同时比较子优先级,响应优先级数值越小,则优先级越高。

. v# b8 q0 u" Q) v2 _
IPR中的高4 位,又分为抢占优先级和响应优先级。抢占优先级在前,响应优先级在后。而这两个优先级各占几个位又要根据SCB->AIRCR中的中断分组设置来决定。这里简单介绍一下STM32F4的中断分组:STM32F4 将中断分为 5 个组,组 0~4。该分组的设置是由 SCB->AIRCR 寄存器的 bit10~8 来定义的。注意:工程开发中应当首先确定中断优先级分组,之后就不要再做修改了。
' k  C$ O$ ~. L8 t
微信图片_20230412191406.png
% @/ x  j4 h5 `% e
4.中断优先级总结
抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。 同一时刻发生的中断,优先处理优先级较高的中断。高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
* o4 Q1 V# m/ w$ P& |9 o- o* f
抢占优先级相同就看响应优先级,同样数值越小优先级越高。如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。如果同时发生则优先处理编号较小(对10个内部异常和82个外部中断所对应的中断入口进行编号,如EXIT5-EXIT9合用一个中断入口,其编号为23,内部异常的中断入口编号均为负数)的那个,也就是异常向量表中排前面的先执行。
6 _" s& }% D( `: a
微信图片_20230412191605.png
  • EXTI,外部中断控制器
    ! S' a# L- y& v- m
% i, K/ Y: R  v+ C, F; u7 c
简单来说,EXTI就是管理GPIO产生的中断,是GPIO与NVIC连接的中介,由于GPIO管脚太多,需要一个统一管理,就是EXIT,而其他的片内外设如串口、定时器、I2C等产生的中断直接被NVIC管理。
3 l; {' ^/ m: ~
微信图片_20230412191608.png
$ O# Z2 }8 h. |. T3 x# ~9 \
EXTI共有16个通道选择器,每一个编号相同的GPIO管脚连接到编号相同的通道选择器中,每个通道选择器最终输出一根中断输入线,工作时,每一个选择器下同时只能有一个管脚被配置使用,具体配置哪一个管脚由该器件的外部中断配置控制器SYSCFG配置。

2 y" \% N+ D& E7 n
EXTI0-EXTI4每一个都有单独的中断入口,而EXTI5-EXTI9合用一个中断入口,EXTI10-EXTI15也合用一个中断入口。
1 q4 G) P! I! j) g$ g$ ]) V( n
一个SYSCFG只能配置4个通道选择器,因此需要4个SYSCFG。

) A* n* U5 [; y! G4 H0 N( Q, g5 M
微信图片_20230412191610.png
. b4 ?+ X2 J4 i
  • 外部中断处理流程:

    3 R6 D; ?- j+ R8 S/ o9 |
微信图片_20230412191613.png

! N$ o4 z; n3 G. }5 J' }, M0 \; v
1:中断输入线,外部管脚产生的中断由此输入。可以是高电平,也可以是低电平,根据设定要求产生
2:边沿检测电路会根据设定中断产生的方式检测电平,判断是否发生中断,如上升沿触发中断、下降沿触发中断或者上升沿和下降沿均可触发中断
3:如果2满足条件,会经过一个“或”门,“或”表示由外部输入的中断信号可以触发中断,内部的事件也可以产生中断,如定时器的更新事件等,不论外部内部,只有有一个就继续下去
如果是电平,就向上走,如果是事件就向下走
4:通过一个“与” 门,与表示新来的中断已被挂起(中断产生还未处理)记录,且次此中断没有被屏蔽,二者同时满足后可交由NVIC处理,传送至内核进行响应。、

# T! v# X; Y4 |) A$ K  e9 v: M2 p
  • 按键中断实例
    6 n% A1 t* T6 p4 ]- t, _

1 z& a9 j5 i& a$ Q% [
配置GPIO为外部中断模式,触发方式为下降沿触发,使能外部中断入口,设置优先级,包括主优先级和子优先级。
; m4 t( l3 ^# K6 N
在Cube MX中只要使能了中断入口肯定会生成对应的中断处理函数,这些处理函数被归纳到stm32f4xx_it.c当中,这里面的文件都是中断处理函数的入口(IRQHander,Interrupt ReQuest Hander,中断处理请求函数)
* I, }) F7 n4 V! ~& s
在此文件的相应的函数入口处一步步追下去,就可以得到相应的中断处理代码。
. k) q- x) B, o$ g0 a7 \: R3 b
微信图片_20230412191616.png

2 F0 _5 Z% O) a2 i+ C6 a
微信图片_20230412191619.png
8 q7 C: X0 Y  Y) K! G; T" b
这里的Callback函数一般是若函数,意味着用户可以对该函数进行重新编写完成自己的逻辑功能。将该函数复制到gpio.c中进行重新编写,复制时不需要复制函数前的__weak(弱函数典型的标记为函数前有__weak),因此在整个工程里就会有两个同名的函数,系统在编译的时候遇到两个同名函数时,就会自动忽略有__weak标记的函数,转而去编译用户自己编写的同名函数。
  1. //gpio.c ( f& N% n; e  T5 g) i
  2. ) k5 T- F5 x- O0 U3 u: v( m0 p
  3. void HALGPIO EXTI_Callback (uint16_t GPIO_ Pin){. Y4 }3 H( \0 q3 ]# U1 P# n
  4.   if(GPIO_ Pin == GPIO_PIN_9){1 U5 B5 q/ J- B. p& c4 C1 w
  5.         HAL_Delay(20);//延时,用于消除抖动; [- X; F8 }9 A6 o+ e" s' j! k
  6.               if(HAL_GPIO_ReadPin(GPIOI,GPIO_PIN_9) == GPIO_PIN_RESET){
    : [" ?$ Y) C2 v
  7.               //读管脚为低电平表示确实被按下了
    9 r2 N0 J: ?, ^0 @8 K, f
  8.                         printf("KEY3 INT success\n");% e, ~. d8 C- s
  9.                }. {2 E0 E, W1 P8 v: y: e
  10.    }
    . Q& ]9 a7 U) O5 b
  11. }
复制代码
  1. //main.c
    : ]$ ~! W7 Y( d
  2. , s1 F9 k( z  q* R( q. ^
  3. include "gpio.c"
    5 d0 k  `9 {  U  G2 R) }1 m+ N
  4. include "usart.c"
    - K4 D- Y" @& ]5 z: E
  5. 3 L" W# k0 i$ g' f
  6. main(){
    ! s6 \# [  z* Y! n
  7. MX_GPIO_Init();//对GPIO口时钟配置,中断优先级配置,触发方式等的初始化
    * m- {4 @! P" L5 e+ f
  8. MX_USART1_UART_Init();对USART1初始化配置
    : u0 W3 j6 n5 V5 F; f* O
  9. while(){}
    1 @+ W6 Y6 o6 |+ k: h
  10. }
复制代码
; E6 P+ S0 X9 S+ j) W
HAL_Delay()函数是由Systick定时器实现的,也涉及到一个中断的处理过程,执行的是系统内部的定时器产生的异常处理函数,因此设置按键中断的优先级必须要比HAL_Delay()要小,否则HAL_Delay()函数无法抢占导致程序死掉。
6 F; F2 b1 y! q' o* C$ j  h9 t* q
  • 串口中断实例、

    4 M& B/ A0 j" c/ `8 L% U; K; U6 l

1 h6 X& J9 E( w9 O7 M# K
配置串口管脚参数,使能串口中断入口,设置优先级分组,设置串口中断优先级。
( I" U# m/ Y2 @% C$ P. l
微信图片_20230412191621.jpg

" _/ ~8 V9 \+ h7 q" P7 `0 l, m
微信图片_20230412191625.png

' j) `# K1 n+ q
1.HAL_UART_IRQHandler ( &huart1);追进去有相当多类型的中断处理函数,选择串口在传输模式下发送完成的中断处理函数。
6 m$ \4 W, p9 H4 W" a( b, P! ~
微信图片_20230412191628.png

% o8 d- B; J1 i  @+ |' x, o! J
微信图片_20230412191632.png

+ _$ y- C1 q9 G- p
微信图片_20230412191636.png

+ P2 c" _6 O4 b0 X1 X
用户只需实现void HAL_UART_ TxCpltCallback (UART_HandleTypeDef *huart)的逻辑代码
/ I! {" t) A  O! S7 w+ T6 F/ Z
2.HAL_UART_IRQHandler ( &huart1);追进去有相当多类型的中断处理函数,选择串口在接收模式下的中断处理函数。
8 e3 n& `; a2 J8 A1 \* H' X6 \
微信图片_20230412191318.png
8 [" e2 z; X: ~4 v9 J( u# Z; Y" ^) }
该中断处理函数仍然会调用一个回调函数。
! ]) q- `: @( `
微信图片_20230412191642.png

" Q2 H( E/ G! O& n) ~* F
微信图片_20230412191310.png
- f( Q" `, }: Z  C
用户只需实现void HAL UART RxCpltCallback(UART HandleTypeDef *huart)的逻辑代码
; _4 r' }7 D" @1 I' v4 r9 e
串口中断有专门的串口接收中断函数和发送中断函数用来触发中断。
HAL_UART_Transmit_IT();
HAL_UART_Receive_IT ();
  1. //main.c
    # C3 Q& I: g- L" q

  2. # q3 B# F2 ^2 c' H4 f9 E
  3. include "gpio.c" ; \8 w. U0 ^5 `/ ?
  4. include "usart.c"
    / ~6 L, F, f: X( @2 v* V
  5. uint8_t revbuff[2]={0};//接收缓冲区,定义全局为变量用于外部引用
    - A# r0 v& A+ S0 |9 o! f
  6. main(){
    1 [- r" U) U. l" F. H* p
  7.   MX_GPIO_Init(); 6 E+ A* s$ p, t; ~* K* D
  8.   MX_USART1_UART_Init();//对USART1初始化配置,中断优先级配置 . W% ^% H, ?5 V! S: o4 t
  9.   HAL_UART_Transmit_IT(&usart1,(uint8_t *)"USART SEND\n",11);
    # a4 [, W" V2 K3 b6 n8 y' U
  10.   //只有发送11个字符完成之后会触发发送完成中断,只触发一次
    0 b# r6 h0 |* G
  11.   HAL_UART_Receive_IT(&usart1,revbuff,2);
    $ Y0 ~5 U6 h6 W+ u* S
  12.   //只有接收到2个数据后触发接收中断,只触发一次,若想多次触发,必须再次调用
    4 e: G( [- h9 T
  13.   while(){} 3 Z3 w+ y; R- |
  14. }
复制代码
  1. //usart.c + F; k5 P/ P9 o
  2. ' t! e6 N7 \4 }7 H6 p+ b: s  S
  3. void HALUART_ TxCpltCallback (UART_HandleTypeDef *huart){    + u% q: N# p6 p2 k& o7 r* G5 d
  4.   if(huart->Instance == USART1){        
    : E. c- F5 n; C9 }. k+ F; I
  5.   printf("UART SEND end\n");        
    ! D  W3 ]+ X7 b0 X
  6.   }
    + R3 T. S4 [- ~/ @, x/ a
  7. } 6 ?  g; z6 p- ^% L+ c$ J/ c
  8. extern uint8_t revbuff[2]={0};
      @* Y$ ?- y8 C6 g' G/ s
  9. void HAL UART RxCpltCallback(UART HandleTypeDef *huart){   
    4 t$ g4 Z3 R: F. V$ ^! J4 y
  10.   if(huart->Instance == USART1){       6 ^6 z5 @6 I% `7 y. D( m" i1 S
  11.   printf("revbuff[0]=%x,revbuff[0]\n");          & e( `% m  ]/ a0 Y5 @4 a8 J
  12.   printf("revbuff[1]=%x,revbuff[1]\n");            S5 y$ l( p3 i. [+ E- F
  13.   HAL_UART_Receive_IT(&usart1,revbuff,2);//用于多次触发接收中断   
    ) `! m# n# b, V2 |7 Z- k7 Z
  14.   }     
    3 w! d$ I7 S( O( _/ [1 v
  15. }
复制代码
+ F* e1 {. A- o( n
转载自:骆驼听海
如有侵权请联系删除

7 _% ~; Q( d0 u" g0 b
微信图片_20230412191346.png
微信图片_20230412191402.png
微信图片_20230412191410.png
微信图片_20230412191414.png
微信图片_20230412191417.png
赞 收藏 评论0 发布时间:2023-4-12 19:17

举报

0个回答

所属标签

相似技术帖

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