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

【文末有奖】18年,出货150亿颗,STM32何以深入人心  

[复制链接]
STMCU-管管 发布时间:2026-1-4 09:28
阅读主题, 点击返回1楼
赞 1 收藏 1 评论56 发布时间:2026-1-4 09:28
56个回答
liukong 回答时间:2026-1-6 15:37:17

恭喜STM32出货150亿颗,做大做强再创辉煌

BEEE 回答时间:2026-1-6 22:23:03

👍 18年,出货150亿颗,STM32何以深入人心❤️ 🚀️

LSMing1623 回答时间:2026-1-7 09:04:53

恭喜STM32出货150亿颗🎉️ ,里面也有我的一点贡献😄

STMCU-管管 回答时间:2026-1-7 14:41:31

CM_STM32 发表于 2026-1-4 21:36
刚接触到stm32,是跟着B站视频学习用的STM32F103C8T6,当时学的还是标准库,初始化需要通过函数操作, ...

[md]不少不少

老牛洋车 回答时间:2026-1-8 08:53:02

恭喜STM32出货150亿颗。毫不夸张地说:20年来ST公司对普及单片机的应用作出了卓越的贡献。

fafa1 回答时间:2026-1-8 10:05:34

骄傲一下:150亿项目有我!!!😄

molun 回答时间:2026-1-8 16:47:33

最开始接触STM32应该追溯到2020年,工作发生了变动,家里闲了大半年,无意间拾起了DIY的乐趣,最开始就是接触STM32103C8T6开发板,后边MCU价格疯涨,十多块的开发板涨到一百多。好在后来价格回落了,才能有后续的诸多折腾。

image.png

正儿八经使用STM32开发工具是去年参加EEPW论坛的活动,“Let's Do!ST NUCLEO-WBA55CG无线MCU开发大作战”,通过开发板制作了一个可以通过蓝牙和微信小程序控制的灯带项目。系统的学习了环境搭建,基于官方实例代码的修改,程序编译以及与微信小程序的接入互动等。

image.png

DIY方面也使用立创EDA绘制了基于STM32103C8T6的开发板,也算是半路小小的入门了。

18 年,从一颗芯片的初心到 150 亿颗的传奇!STM32 用十八载热血与坚守,在嵌入式领域书写了属于自己的辉煌答卷。从 Cortex-M 内核的果断布局到 18nm 相变存储器的技术突破,从 STM32Cube 生态的化繁为简到连续四年登顶全球 MCU 市场榜首,每一步都彰显着创新的力量。这 150 亿颗芯片,是工业电机里的精准驱动,是智能家居中的便捷连接,是医疗设备上的生命守护,更是千万开发者逐梦路上的坚实伙伴。它打破了技术壁垒,重塑了市场格局,让嵌入式创新变得触手可及!致敬过往,更向未来!下一个征程,STM32 将以更强算力、更优能效、更全生态,冲刺下一个 150 亿颗目标,与全球开发者并肩,在 AIoT 的广阔天地中,再创行业新高度,铸就更多不可能!

image.png
cove 回答时间:2026-1-9 11:50:09
  • 产品型号 :STM32F103C8T6核心板(俗称“Blue Pill”蓝色药丸)。
  • 为什么选用 : 那还是大一刚进实验室的时候,学长告诉我:“想搞机器人,51是不够的,Arduino 效率太低,你得学 STM32。” 当时作为穷学生,这款板子简直是“性价比之王”。十几块钱的价格,72MHz的主频,丰富的接口,对于当时只见过 51 单片机的我来说,简直就是性能怪兽。加上网上教程铺天盖地(感谢野火/正点原子),它是最理所当然的选择。
  • 使用过程 : 刚开始是痛苦的。习惯了 51 的直接操作寄存器,第一次面对 STM32 庞大的库函数和复杂的时钟树配置,我整个人是懵的。 我记得为了点亮板载的那颗 PC13 LED,我折腾了一整晚。从安装 Keil MDK,到配置 ST-Link 驱动,再到理解什么是 GPIO_Init。 当第一次代码烧录进去,看到那颗绿色的 LED 按我设定的频率闪烁时,那种成就感无以言表。后来,我用它配合 L298N 驱动了人生第一个直流电机,虽然只是简单的 PWM 调速,但看着示波器上完美的方波,我知道我入门了。
  • 感受 : F103C8T6 虽然资源有限,Flash 常常捉襟见肘,但它是我的一位“严师”。它逼着我学会了看 Datasheet,逼着我理解了中断优先级,逼着我从“写代码”进化到了“配置硬件”。它是简陋的,但又是强大的,它是我从纯软件思维转向软硬结合思维的起点。直到现在,做一些小验证项目时,我手边还是会备着几块它。
电子烂人 回答时间:2026-1-11 20:10:27

恭喜STM32出货150亿颗!

第一次使用STM的MCU是在竞赛里替代掉8位和16位单片机,当时就被ST的MCU易用性所惊艳到,可以使用CUBE绕开繁琐且冗杂的RCC和外设配置,且ST的强大生态和海量资料的支持使得遇到问题可以快速定位并解决,用的型号是STM32F407VET6,也是工控最经典的型号了

老项目考古:大学时期和同学做的无人机,当时的飞控是H743,性能强大且外设丰富,可以满足大多数飞行需求。

8432b6cfb93f41075738a9631b63f90a.jpg

印象深刻的一次移植是从F4移植到H5上,当时的U5平台还很新颖,M33核的LP外设工号更低、DMA配置更复杂,且资料更少。不过CUBE的强大生态和高兼容性使得移植速度快了很多。

image.png

在中间固件这里选择x-cube-MEMS包,下载好之后选择LSM6DSO16IS这个传感器。

d2b8a0b89e397b6c351dcd13d3d23dc.png

之后选择I2C1接口,配置成FAST快速模式,这个I2C正好是板子上对应的传感器接口。M33核的DMA配置有点不同,这里先不配置DMA。

image.png

回到中间固件这里,把板子的I2C接口选中为I2C1。

image.png

时钟配置如图:

image.png

Qiuxiaoxiong 回答时间:2026-1-12 13:52:41
恭喜STM32出货150亿颗.
% x/ l& y& |, j5 c
Xa__ 回答时间:2026-1-13 08:49:13

想了一下,第一次用STM32应该是学校的练习项目了,具体型号应该是F3系列,第一次练习是点灯,哈哈哈

LSMing1623 回答时间:2026-1-13 09:11:32

恭喜STM32出货150亿颗🎉️ ,里面也有我的一点贡献😄

latera 回答时间:2026-1-13 22:56:47
①分享与STM32的故事:回想我首次使用的STM32的芯片应该使用STM32F103C8T6,这已经是十几年前(2011)了。当时是用来做一个检测汽车车轮转动的角度的测量仪器。STM32F1系列在当时是相当的火。网上的教程和开发板都很多,而且在电子论坛和qq技术群上的讨论和学习的热度都很高。这个项目需要用到stm32的定时器来检测编码器,还有I2C,串口,spi来控制传感器和保存数据。对应我当时一个初学者来说,也是相对有难度,特别是当时发现,转速较快的时候,定时器获得的编码器读数不对。好在通过社区论坛得到帮助,发现中断中的处理时间过长,只要将计算处理放到中断外部就可以解决。这次也让我发现闭门造车很容易闭塞自己的想法。只有不断跟进新的技术才能有新的想法和解决问题的不同思路。
( A- G5 R- {( @& U2 \
; {' n/ i2 J/ k8 Y②老项目考古: 分享一下我的毕业设计,是一个具有VGA格式输出的摄像头设计, stm32f103c8作为主控芯片,OV9650摄像头获取拍摄数据,TrueView5725转码器将摄像头的YUV数据转为VGA数据并输出。stm32f103c8通过I2C控制摄像头和转码器,并且IO连接控制的按键和显示状态的led。2 D& V. d. m' J# P
QQ20260113-213757.png QQ20260113-213815.png
3 Y0 X( c" `1 [' {3 ]主要代码实际为I2C控制OV9650和TrueView5725,包括控制他们的视频格式和启动。
4 U' W- \7 g) J! W6 u/ {
  1. int main (void )+ z5 D, v: k$ w8 ~0 W; B. W) P2 d) {
  2. {
    8 L, p; r. v% q1 w
  3.   SysInit();; Z9 h4 M# `9 B% y  \+ p; u/ |; n! N
  4.         RCC->APB2ENR|=1<<2;
    4 J0 G; o! @9 n/ K; ~3 b
  5.         GPIOA->CRH&=0xffff000f;+ J; G% M* F6 O' d8 R$ X
  6.         GPIOA->CRH|=0x00003330;
    ' ^1 g4 L* c0 o
  7.         GPIOA->ODR|=0<<9|1<<10|0<<11;+ z/ m- k5 I4 Y& i
  8.        
    $ M! K6 ^5 H( N+ W' J
  9. //        ModuleInit();
      P, s$ H% m! i
  10. sccb_init();7 f8 _& g3 k6 M
  11. Ov9650Init();1 {$ C5 [! @2 N3 q
  12. TrueView5725Init();
    0 m+ S% o; ^1 H$ Q5 e) |: u
  13.         while(1)9 F  e0 p& K% \$ y3 t5 e2 ]& G
  14.         {" r4 l, ]) m% t+ ]1 i' W
  15.                 TaskControl();0 u9 d# p. w% X( h0 m( e6 z
  16.                
    ) S) \8 G% ]  z5 p5 h1 X
  17.                
    ' o' E7 M7 H4 E$ [; H
  18.         }  c. B" X. K& ~5 k( V1 Y
  19. }
复制代码
其中 OV9650的初始化:' K7 K( o% x! e/ t. k8 E6 j3 I; ?
  1. u8 Ov9650Init()
    - w. F3 a: r8 t# z8 h+ ]' O
  2. {4 ^( Y# m! M7 F% O. ?
  3.         u16 num;; P; m0 w1 Z- g' Z8 o% I( f1 Q
  4.         u16 i;; z) M& G; }1 V+ S3 v
  5.         u8 val;' t5 f/ n7 ^+ A' n9 U' k4 k5 E
  6.         u8 rs=1;1 J) G6 ]. c( _. G- a0 G; @
  7.         unsigned char addr;8 \5 Z5 C3 k& N( m

  8. / S9 g9 ~9 B. k! Z. s5 B( Z6 t
  9.         RCC->APB2ENR|=1<<2;
    1 ?* K) r' s: X$ O
  10.         GPIOA->CRL&=0xffff0fff;, P, j7 y0 ~5 k8 {5 I
  11.         GPIOA->CRL|=0x00003000;
    " e- y1 T+ ~) D- O, w* ^
  12. 1 d- i1 b: m! Q) T3 t
  13.         GPIOA->ODR|=0<<3;
    ; ?" ~7 Z9 `* P' y5 [( M& ?
  14.        
      v+ M2 `) g% Z$ }
  15.         addr=CAM_OV9650;; c4 D  F6 f: y. a9 o) K6 U
  16.         sccb_senddata(0x12,0x80,addr);                                //软件复位0 W1 a4 p& X7 B5 N+ ^, U* Q3 @

  17. 8 f3 |& v! S5 o, U/ v4 @7 p/ n
  18.         DelayMs(1);                                                                //手册要求* z. g! d9 [* a1 J5 L: E

  19. 0 Y* {; z# s3 P" ^
  20.         val=sccb_receivedata(0x0A,addr);
    2 @  q0 S3 _% o& h

  21. 5 I# D: {" Q1 O& ~6 r- Z
  22.         val=sccb_receivedata(0x0B,addr);       
    ! W9 O8 B5 W; U* W. H4 D
  23.        
    2 H, N2 y& t; y2 ^! {, O1 O
  24.         val=sccb_receivedata(0x11,addr);         3 B0 \# ?' O) ]6 f" y. i8 M5 T
  25.        
    " e  n' b1 d0 t9 p  v2 m
  26. //        num=sizeof(OV9650Sxga565Set)/2;
      t( k' o+ Z' j
  27.         num=sizeof(OV9650SxgaYuvSet)/2;* U6 o& @, R! ?/ j' g: S5 B
  28.         for(i=0;i<num;i++)+ z9 V7 _: U3 Y2 ?/ p- G
  29.         {
    & |% Z6 Y/ W( J6 }1 k6 d
  30. //                sccb_senddata(OV9650Sxga565Set[i][0],OV9650Sxga565Set[i][1]);/ R+ \3 L( D* \) z
  31.         sccb_senddata(OV9650SxgaYuvSet[i][0],OV9650SxgaYuvSet[i][1],addr);
    - m! a. f$ d( ^; N0 u' H
  32.         }
    : a8 e7 i( w& R+ z4 D  k8 N) @

  33. , s" e& Z* H/ e/ W' B: ?
  34.         #if 1                //用于TV5725 (YUV); z; B+ \7 k9 R' \1 ]
  35.         num=sizeof(OV9650Tv5725)/2;  U1 w4 [2 f" E# Y, S0 ^
  36.         for(i=0;i<num;i++)
    1 G! }9 k' F$ q- |3 w
  37.         {
    ( k# k+ o/ R+ I7 _, c9 }
  38.                 sccb_senddata(OV9650Tv5725[i][0],OV9650Tv5725[i][1],addr);7 Q* c; i  A/ |1 J7 q6 _7 N3 i/ H
  39.         }
    : L2 `' v8 q5 @5 w8 Y6 D
  40.         #endif& \  d5 e! e4 t, _# O# E# r
  41.         //读出1个看看是否写成功了: g& f0 z1 w! m
  42.         val=sccb_receivedata(0x11,addr);
    0 |: ~" @, E% I9 }8 x
  43.   " B! w; ~3 v5 ~- G; ~3 a
  44.         val=val;. D7 T6 N8 ?6 e: V
  45. ' J3 i$ H' v- X
  46.         return rs;
    9 p) K# ?, H2 [( ]% y% i
  47. 8 H7 v. T$ W* Y2 v9 s1 T  Y
  48. }* @' a% [: r7 x9 X  ^' |
复制代码
和 TrueView5725的初始化:' G9 Q+ Z: n8 Q  F5 {, M

. @0 M" U% A4 p* u& K3 G' ]" vu8 TrueView5725Init()
, P+ F# c  y- K4 d# A7 U: u{
  ]( I& V7 A$ u; c8 J. B/ [9 q        u16 num;
) g. |$ d6 ^, ?* S# n        u16 i;) K1 C2 M4 x0 x$ T: `, E& C
        u8 val;4 i5 ~5 T" b1 Z- F; B$ _
        u8 rs=1;
8 E; s" K6 s7 B2 _5 X        unsigned char addr;' J1 @/ N4 W3 d: L; ]& }
! J( C! U3 T  y# p+ Y9 P) `( l' K
        RCC->APB2ENR|=1<<2;
  P! K6 c9 R) z: D, V. B        GPIOA->CRL&=0xfffff0ff;
+ w6 x9 K5 `2 O7 w1 p3 [        GPIOA->CRL|=0x00000300;
" E" p" {  K$ \
' ^& `: ?" q. B# ?4 Y# `/ [+ ^2 T        GPIOA->ODR|=0<<2;
  D/ ?0 y1 |, A2 L% i* n2 u& S        Delayms(2);
& h% k$ E' |0 M6 F, ]6 G3 u        GPIOA->ODR|=1<<2;- @2 x8 a5 Q) A9 B( h! G
  ?4 @0 Y9 x. r" c7 S
  @" M& T0 o3 O% M* ^" `+ F" \
        addr=TV_ADDR;" r9 b5 U& {8 Q; b! {9 [
7 @4 |( F' _/ q. a( i% ]
        num=sizeof(TrueView5725_5)/2;+ F: N3 B" l8 N* w/ g

' |4 }- f  o" t, g$ j        for(i=0;i<num;i++)( s8 Y' c& M8 G1 c. V! ?1 l# y
        {
0 }1 V8 K( q# n' G" C/ H
7 N. P4 `8 w6 u9 ?4 o2 c. q        sccb_senddata(TrueView5725_5[0],TrueView5725_5[1],addr);
. d& d' W& d( }: I  u        }
% }' V; b0 a/ ?& c9 Y
1 Z2 l6 i3 I# g3 r' n( J# ^5 Y$ Y4 I+ C
        val=sccb_receivedata(0xf0,addr);# n4 V' U* V/ D& u6 D
       
9 z1 ?3 W# [8 X8 s9 I  A        val=sccb_receivedata(0x20,addr);
' ^2 ^2 N8 X. @" R! A! Q* i! f4 k                 : ^7 Y. X4 z; |
        val=val;
9 j* e- c4 {5 N% g  Y( k- f. l  F7 u: x) Z0 H  j+ o3 q0 t6 H' @
        return rs;7 \" t' L: G0 f; H9 y( ?$ t
& l1 e" j6 W" x* Q
}/ w) u! r' m6 Q0 S' B  J0 H, U
这个项目在现在已经已经是相当淘汰的方案了,但是当时完成后,我也是相当满意。
. n7 ^# e& w! k8 ~; S/ T9 p6 G; x( z2 D* r/ d9 J
④分享首次使用STM32软件的感受: 在开始学习stm32时,一般是直接调用标准库,但是后来意法半导体出了stm32cubemx的软件后,发现程序开发的通用性高了很多。因为我在一个项目中切换芯片,不用重新再网上下载对应库文件,和比较不同系列芯片的差异,只需要在本来做好的cubemx工程中修改相应的芯片,在重新生成便可以直接编译出新的执行文件,并且stm32cubemx提供官方库文件和像freertos等第三方库文件也是生成即可使用,不用重新移植。当然在当时的stm32cubemx也有挺多问题,主要是HAL库效率比较低。但是随着芯片的性能越来越高,还有LL库和HAL库的互相补充。使得stm32cubemx的应用越来越多。% L* T% W: h% d
& l- K9 B# B$ o
" k- e7 \+ Z; e$ @7 `( T# g

  X! A+ ^0 |5 h0 G- f恭喜STM32出货150亿颗,用STM32芯片的人越来越多,软件生态越来越来完善,STM32在中国的发展越来越好。7 L9 P$ C1 m9 k6 ~0 v4 S8 H( m

0 g/ c+ h: G! W9 c
思维浪花 回答时间:2026-1-14 14:23:26

🎉 恭喜 STM32 全球出货突破 150 亿颗!用芯成就创新,以生态赋能未来!

myxiexing 回答时间:2026-1-14 15:24:58

恭喜STM32出货150亿颗。主要还是有中文资料,对中国用户比较友好。 同时开源的项目多,易上手。当然也离不开ST官方丰富的开源资料和培训资料。

所属标签

相似技术帖

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