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

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

[复制链接]
STMCU-管管 发布时间:2026-1-4 09:28
2025年12月,意法半导体全球交付了第150亿颗STM32芯片。从2007年第一颗STM32F103诞生至今,历经18年,STM32以“开发者优先”的战略,凭借超级产品矩阵、持续迭代的工艺技术、完善的生态体系、独特的垂直应用方案和稳健的供应链体系,从行业跟跑者成长为全球通用微控制器(MCU)领军者,不仅是嵌入式领域最懂开发者的“同行者”,更成为亿万电子设备的“智能大脑”。

芯途启航:一次前瞻抉择,铺就百亿征程
STM32的传奇,始于一次改写行业格局的关键抉择。2004年,当Arm带着当时鲜为人知的Sandcat内核IP(后更名Cortex®-M3)造访ST Agrate时,ST团队敏锐捕捉到这一内核的颠覆性潜力,它将为通用微控制器带来性能与兼容性的双重突破。被誉为“STM32之父”的Daniel Colonna,这样评价对Cortex®-M内核的“All in”布局:“选择这款内核,是基于当时对Arm未来登顶行业标准的战略预判,如今我们收获了这个决策的时代红利。”
STM32堪称嵌入式行业的变革者。在2007年问世之初,就以超凡的性价比优势,树立起32位微控制器的行业新标杆。这一突破性成就的背后,是来自意法半导体产品定义、架构设计、生产运营、质量管理、技术支持等多个团队的协同赋能。它不仅弥合了16位与32位产品的性能与应用鸿沟,更重塑了微控制器市场格局。此后十八载,STM32的技术迭代始终围绕“实用创新”展开。这些创新涵盖内存容量提升、内核性能增强、边缘AI集成、安全特性升级与连接功能拓展等关键方向。从2021年开始,STM32登顶全球通用MCU市场榜首,并连续四年蝉联桂冠。2025年12月,STM32迎来了全球出货150亿颗的里程碑。
历程26.png

STM32,何以致胜?
问世之初,STM32还只是MCU市场的后发参与者,如今已跻身全球MCU领域的领航者之列。是什么力量,让STM32完成这样的蜕变?

超级产品矩阵
STM32的核心竞争力,在于构建了覆盖“入门级到高性能”的全维度产品生态,形成五大产品类别:超低功耗MCU、主流MCU、高性能MCU、无线MCU与MPU,拥有4000余种型号,90余种封装形式,内存配置灵活,丰富的外设可满足不同场景需求。
210.png
生产工艺不断迭代
STM32的生产工艺从成熟向先进制程不断迭代,横跨多代技术节点,工艺研发聚焦嵌入式存储器这一核心领域,包括130nm与110nm嵌入式存储器(EEPROM)、90nm与40nm闪存和eSTM技术,以及突破传统闪存性能瓶颈的18nm相变存储器(ePCM)技术。这些核心工艺均已实现规模化应用,稳定支撑STM32超4000种型号的供货需求。

让开发更高效的完善生态
STM32的成功,不止于芯片本身,更在于它构建了一套“以开发者为中心”的全栈生态系统,以“硬件+软件+社区+服务”的生态模式,让STM32成为开发者的“省心之选”。

化繁为简的工具链
2014年推出的STM32Cube开发框架,整合了STM32CubeMX可视化配置工具、驱动库、中间件与调试环境,通过HAL/LL双驱动库设计,通过CubeMX拖拽配置即可生成初始化代码,HAL库保障跨系列代码复用性,LL库满足资深开发者对代码精简性的需求。如今,这套工具已汇聚150万+活跃用户,配套的评估板从10美元的Nucleo开发板到500美元的高端评估板,帮助开发者快速启动项目、开展原型设计。
211.png
连接同行者的社区服务
STM32深知,开发者的成长离不开交流与支持。始于15年前的ST社区,如今每年吸引超200万访客,在此共享经验、解决技术难题;新增的AI助手STM32 Sidekick,进一步优化社区体验,通过智能检索提升文档查询效率,让开发者聚焦创意实现。同时,ST整合全球合作伙伴资源,形成涵盖硬件配套、软件服务、工程支持的协同网络,为超过10万客户提供服务。

独特的垂直应用生态
针对GUI界面开发、边缘AI、功能安全、信息安全、电机控制、数字电源这六大垂直应用场景,STM32配备了专属工具套件,助力开发者高效推进项目开发。
  • GUI开发,TouchGFX是STM32专属的图形开发工具,支持可视化设计,提供GUI代码示例和图形资源库,可助力开发者高效构建高级HMI界面;
  • 边缘AI应用,ST Edge AI Suite是包含10余款免费软件和工具、50+示例、20+资源文档的工具套件,可快速落地边缘AI应用;
  • 功能安全领域,STM32配备了两类安全包:一类是适配工业领域IEC 61508标准的SIL包,另一类是适配家电相关标准的Class B包,满足不同场景的安全合规要求;
  • 信息安全领域,STM32提供STM32Trust安全框架,包含可扩展的安全服务和可信执行环境(TEE),不仅支持安全启动、加密引擎等关键功能,还通过PSA/SESIP认证,为嵌入式系统筑牢安全防线;
  • 电机控制领域,STM32推出了电机控制软件开发套件(MC SDK),包括永磁同步电机(PMSM)的FOC控制固件库,还搭配了可视化STM32电机控制工作台,方便开发者直观配置各项参数;
  • 数字电源领域,STM32提供了一系列开发资源,包括含DP SDK的开发平台、PFC/PSU固件包,再搭配硬件开发板、eDesignSuite工具、X-CUBE-POWER套件等生态产品,助力开发者快速搭建数字电源转换方案。

稳健的供应链体系
可靠的质量与灵活的供应链是STM32稳定交付的核心保障。ST新增了中国本地化40nm STM32供应链,成功实现“同一个设计,国内外双供应链”的布局,让客户享有更高的灵活性,获得更强的供应链安全保障。采用全球统一的STM32设计标准与质量控制体系,确保不同供应链产出的产品性能、品质完全一致。首款STM32H7已于今年12月在合作伙伴华虹宏力量产并已交付客户。

芯向未来:下一个百亿,赋能更多可能

150亿颗出货的里程碑并非终点,而是新征程的起点。STM32未来将持续以“开发者优先”为发展战略,扩容产品型号、深耕工艺技术、更新升级生态,丰富垂直应用方案,赋能全球开发者跨越技术壁垒,推动嵌入式创新走向更广阔天地。


4.gif
有奖活动:
活动时间:1月04日~1月31日
活动规则:(四选一)评论区分享即可
①分享与STM32的故事:回忆首次使用STM32产品:产品型号、为什么选用、使用过程、感受
②老项目考古:分享使用STM32最早/最印象深刻的项目:简介、图片、代码片段
③展示从STM32F1到H7、N6、MP1、MP2等系列其一的项目移植历程
④分享首次使用STM32软件的感受

活动奖励:
评论区分享有机会获得板卡一块,走心着必得。
1、STM32C0116-DK  15块
2、NUCLEO-G031K8 15块
若按照上方①~④中规则分享2个以上,则有5个名额获得2块板卡的机会。

彩蛋奖:每人说一句恭喜STM32出货150亿颗的话,抽10位送STM32开发板!





1 收藏 1 评论56 发布时间:2026-1-4 09:28

举报

56个回答
HyunYong 回答时间:2026-1-4 12:00:02

恭喜STM32出货150亿,再出个新芯片出个新板卡,做大做强再创辉煌😄

〃聪聪哥哥 回答时间:2026-2-2 11:20:13

移植的项目:从STM32f1到H7533的升级:

/***********************************************************************************************
  * @brief   void ClearGraphLine(void)
  * @param   清除数据
  * @retval  无
  * @author  聪聪哥哥
  * @version V1.1.0
  * @date     1-8-2024
*************************************************************************************************/
void ClearGraphLine(void)
{
    SendBuffer2[0] = 0x5A;
    SendBuffer2[1] = 0xA5;
    SendBuffer2[2] = 0x03;
    SendBuffer2[3] = 0x80;
    SendBuffer2[4] = 0xEB;
    SendBuffer2[5] = 0x55;
    HAL_UART_Transmit(&huart2,&SendBuffer2[0],6,10);
}


/*工作界面下 数据显示部分 */
void  WorkPage(void)
{
/*压力1 显示函数*/
        Add_Write_Data1(0x5000 ,uiPress1Data);
/*位移1 显示函数*/
        Add_Write_Data1(0x5002 ,uiLength1Data);
/*温度    显示函数*/
        Add_Write_Data1(0x5004 ,263);

/*压力  1 显示函数*/
        Add_Write_Data1(0x5006 ,uiPress2Data);
/*位移  1 显示函数*/
        Add_Write_Data1(0x5008 ,uiLength2Data);
/*湿度  1 显示函数*/
        Add_Write_Data1(0x500A ,526);
}

/*界面显示函数 展示*/

void GuiDisplay(void)
{
   switch (ucDispMode)
    {

        case 0:  
        break ;


        case 1 :    WorkPage();
     break ;

        default :
         break ;
    }

}

/******************************************************************************************************************
  * @brief  按键处理函数
  * @param  KeyValue 按键值
  * @retval 无
  *
*******************************************************************************************************************/
void DWIN_Key_Deal(uint16_t KeyValue)
{

        switch (KeyValue)
        {
            case 0x100 :   SendTestData(2);
                    break ;     
            case  0x101:   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
                    break ;

            case  0x102:   HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                    break ;



/*加载*/
            case  0x103:   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
                    break ;


/*停止*/
            case  0x104:   HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                    break ;
/*停止*/
            case  0x105:   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
                    break ;





            case 0x200 :   SendTestData(3);
                    break ;

            case 0x201 :   SendTestData(5);
                    break ;
            case 0x202 :   SendTestData(6);
                    break ;
            case 0x203 :   SendTestData(4);
                    break ;
            case 0x204 :   SendTestData(1);
                    break ;
            case 0x205 :   SendTestData(1);
                    break ;
            case 0x301 :   SendTestData(1);
                    break ;
            case 0x400 :   SendTestData(1);
                    break ;
            case 0x500 :   SendTestData(1);
                    break ;
            case 0x600 :   SendTestData(1);
                    break ;
            default:
            break ;

        }
}
/**
  * 函数功能: 串口2从DWIN屏接收数据
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明: 无
  */
void DWIN_Rec_Deal(void)
{
    uint16_t RecAdd;
    uint16_t KeyValue;
    if(usart2_Flag == 1)
    {
        usart2_Flag = 0 ;
        if((Usart2_DEAL_RX_Buf[0] == 0x5A)&&(Usart2_DEAL_RX_Buf[1] == 0xA5))
                {
                    switch(Usart2_DEAL_RX_Buf[3])
                    {
                        case 0x83: RecAdd = (Usart2_DEAL_RX_Buf[4]<<8) + Usart2_DEAL_RX_Buf[5];
                                    switch(RecAdd)
                                    {
                                        case 0:     KeyValue = (Usart2_DEAL_RX_Buf[7]<<8) + Usart2_DEAL_RX_Buf[8];
                                                            DWIN_Key_Deal(KeyValue);
                                            break;
                        default :
                            break ;                                 
                        }
                    }
                }
    }
}

图片如下所示:

背影101 回答时间:2026-1-29 09:49:23

②老项目,使用STM32F030的红外测温项目,我印象最深刻的项目是使用STM32F030C8T6制作的红外测温。这个项目是通过红外感应温度,通过IIC在屏幕上显示

代码:


/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2026 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "gpio.h"
#include "font.h"
#include "oled.h"
#include "mlx90614.h"
#include <stdio.h>
#include <string.h>

/* Private variables ---------------------------------------------------------*/
static float object_temp = 0;
static float ambient_temp = 0;
//static char object_temp = 0;
//static char ambient_temp = 0;
static uint8_t sensor_ok = 0;

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
void Error_Handler(void);




/* Private user code ---------------------------------------------------------*/

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
    HAL_Init();
    SystemClock_Config();

    MX_GPIO_Init();
    MX_I2C1_Init();
    MX_I2C2_Init();

    OLED_Init();





    OLED_Clear();

    // 检测MLX90614
    sensor_ok = MLX90614_IsConnected();

    // 显示固定内容
    OLED_ShowString(0, 0, "MLX90614 Test");
//    OLED_ShowNum(0, 2, 4,0);

    if(sensor_ok)
    {
        OLED_ShowString(0, 1, "Sensor: OK");
    }
    else
    {
        OLED_ShowString(0, 1, "Sensor: No");
    }

    OLED_ShowString(0, 3, "Object: ");
    OLED_ShowString(0, 4, "Ambient:");
    OLED_ShowString(0, 5, "Raw: ");
//    OLED_ShowFloat(0, 0, 24.39, 3, 1);



    OLED_Refresh();

    while (1)
    {
       if(sensor_ok)
        {
            // 读取温度
            object_temp = MLX90614_ReadObjectTemp();
            ambient_temp = MLX90614_ReadAmbientTemp();

            // 获取原始数据
            uint16_t raw_data = MLX90614_GetLastRawTemp();

            // 显示温度 - 使用紧凑格式
            char buffer[16];

            // 物体温度
            if(object_temp < -900)
            {
                OLED_ShowString(40, 3, "Error  ");
            }
            else
            {
                // 简单直接的格式
                sprintf(buffer, "%.1fC", object_temp);
                OLED_ShowString(64, 3, buffer);
 //               OLED_ShowNum(8, 7, object_temp,0);
 //               OLED_ShowFloat(8, 7, object_temp,0,0);

            }

            // 环境温度
            if(ambient_temp < -900)
            {
                OLED_ShowString(40, 4, "Error  ");
            }
            else
            {
                sprintf(buffer, "%.1fC", ambient_temp);
                OLED_ShowString(64, 4, buffer);
            }

            // 显示原始数据
            sprintf(buffer, "0x%04X", raw_data);
            OLED_ShowString(32, 5, buffer);

            // 显示刷新状态
            static uint8_t dot = 0;
            dot = (dot + 1) % 4;
            if(dot == 0) OLED_ShowString(120, 1, "|");
            else if(dot == 1) OLED_ShowString(120, 1, "/");
            else if(dot == 2) OLED_ShowString(120, 1, "-");
            else OLED_ShowString(120, 1, "\\");
        }
        else
        {
            // 定期重试
            static uint16_t retry = 0;
            retry++;
            if(retry >= 20)
            {
                sensor_ok = MLX90614_IsConnected();
                retry = 0;
            }

            // 闪烁提示
            static uint8_t blink = 0;
            blink = !blink;
            if(blink)
            {
                OLED_ShowString(40, 3, "---.-C");
                OLED_ShowString(40, 4, "---.-C");

            }
            else
            {
                OLED_ShowString(40, 3, "      ");
                OLED_ShowString(40, 4, "      ");
            }
        }

        OLED_Refresh();
        HAL_Delay(500);
    }
}

/**
  * @brief System Clock Configuration
  */
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
        Error_Handler();
    }

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
    {
        Error_Handler();
    }
}

/**
  * @brief  Error handler
  */
void Error_Handler(void)
{
    __disable_irq();
    while (1) {}
}

效果:

image.png

④分享首次使用STM32软件的感受

首次使用IDE的时候感觉好方便啊

可以不用自己写代码

软件可以直接帮我们将基础框架搭建出来

只需要稍微修改就行

大大节省了开发时间

EPTmachine 回答时间:2026-1-4 09:46:12

恭喜STM32出货150亿颗,完成150个小目标

七七baba 回答时间:2026-1-4 09:47:59

恭喜STM32出货150亿颗,ST最大的优势就是用的人多,生态完善,杠杠滴!

liuxingkeji 回答时间:2026-1-4 09:55:58

恭喜STM32出货150亿颗,其中也有我对一点贡献

北方 回答时间:2026-1-4 10:11:02

恭喜STM32出货150亿颗,再创新高

lospring 回答时间:2026-1-4 10:27:21

恭喜STM32出货150亿颗

liloooo 回答时间:2026-1-4 10:38:17

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

liloooo 回答时间:2026-1-4 10:38:41

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

VegardCheng 回答时间:2026-1-4 11:05:13

恭喜STM32出货150亿颗,足够绕地球几圈呢?要是能统计正在服役的STM32芯片就更厉害了

linghz 回答时间:2026-1-4 11:19:38

恭喜STM32出货150亿颗,150亿颗STM32,150亿次创新启航!

lxl666 回答时间:2026-1-4 11:19:41

祝贺STM32系列突破150亿颗里程碑!以创新驱动未来,用芯成就无限可能!

Lucki 回答时间:2026-1-4 13:36:36

第一次接触 STM32 是在 STM32F103C8T6(Blue Pill) 时代。当时项目需要从 8 位 MCU 升级到 32 位,综合性能、生态、成本后选择了 STM32。真正上手后最大的感受是:这不是一颗“芯片”,而是一整套为开发者准备的体系

第一次用 STM32CubeMX 配置时,GPIO、时钟、外设一目了然,自动生成初始化代码,大大降低了入门门槛;HAL 库让不同系列之间的代码迁移成本明显降低,而后续深入项目后,又可以切换到 LL 甚至直接寄存器,新手和老手都能找到舒服的工作方式。从 2007 年第一颗 STM32F1,到今天全球 累计出货 150 亿颗,STM32 能成为无数工程师的“第一颗 32 位 MCU”,也成为大量产品背后的“智能大脑”,绝非偶然。

恭喜 STM32 全球出货突破 150 亿颗! 感谢 18 年来持续陪伴开发者成长,期待下一个百亿继续同行!

〃聪聪哥哥 回答时间:2026-1-4 13:38:13

作为一个从事了ST开发10年的工作经验的码农,祝贺ST在18年里出货150亿颗,想想自己也是使用了,这150亿颗的一部分。恭喜恭喜!!!!

lospring 回答时间:2026-1-4 14:44:52

我与STM32的初次邂逅:从“点灯”开始的信任 我的第一块STM32开发板是经典的STM32F103C8T6蓝色核心板。当时为一个小型智能家居控制器选型,需要在51单片机的性能和ARM9的复杂度之间找一个平衡点。选择它,纯粹因为论坛上所有人都说“资料多,好上手”。

真正使用过程却意外“平淡”。按照教程安装好Keil,用STM32CubeMX生成初始化代码,复制一段点灯程序——整个过程比预想的顺利太多。最深的感受是 “安静靠谱”。它不像有些芯片需要反复折腾底层驱动,ST的标准库(后来是HAL库)让所有操作都有迹可循。项目顺利完成后,那块蓝色的小板子就静静地躺在我的元件盒里,像一位沉稳的老朋友。它不是最强大的,却是我最放心把基础任务交给它的那一个。

1234下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版