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

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

[复制链接]
STMCU-管管 发布时间:2026-1-4 09:28
阅读主题, 点击返回1楼
1 收藏 1 评论33 发布时间:2026-1-4 09:28
33个回答
lospring 回答时间:3 天前

软件初体验:当STM32CubeMX让一切“可视化”时 首次使用 STM32CubeMX 的感觉,堪称震撼。在它出现之前,配置一个STM32项目意味着要手工翻阅上千页的参考手册,计算时钟树、查引脚复用表、逐字编写初始化代码,一个简单的工程建立可能就需要一整天。

CubeMX彻底改变了这一切。图形化界面里,勾选就能配置引脚功能,拖拽滑块就能设置时钟频率,外设参数全部表单化。最让我印象深刻的是生成代码那一刻:点击“Generate Code”,一个完整的、工程结构清晰、包含所有初始化代码的Keil或IAR项目就自动创建好了。几分钟完成过去一天的工作,这种效率的飞跃让人有种不真实感。

但很快我也意识到,工具在降低门槛的同时,也可能让人忽视底层原理。比如它自动生成的HAL_UART_Init()函数,完美地隐藏了波特率除数寄存器(BRR)的计算细节。便捷与深度理解之间需要平衡——后来我养成了一个习惯:每次用CubeMX生成代码后,都会花时间阅读它生成的main.c前半部分的初始化代码,对照数据手册,理解每一个配置寄存器的意义。CubeMX是一位出色的向导,但脚下的路,仍需自己一步步丈量。

阿青_STM32 回答时间:3 天前

恭喜STM32出货150亿颗,ST行业标杆,互利共赢,马年再创辉煌!

meiyao 回答时间:3 天前

①回想了一下,第一次使用STM的MCU时,是用的F103,那个时候是做一个智能小车,主要是它拥有丰富的外设资源,像定时器、PWM、ADC等,能满足智能小车多种功能需求;其性能相较于当时常见的51单片机有显著提升,处理速度更快;STM32有庞大的社区和丰富的资料,遇到问题容易找到解决方案。结合这几点,感觉在实现小车电机控制时,利用定时器生成PWM波来调节电机转速,通过编码器反馈实现闭环控制。这个过程并非一帆风顺,编码器信号处理曾让我头疼不已,经过多次调试和查阅资料才解决。最终看到小车按照指令灵活行驶,那种成就感难以言表。初次使用STM32,我感受到了它强大的性能和开发潜力,也坚定了深入学习的决心。

②老项目那我就要说一下温控了,使用STM32F103的智能温控风扇,我印象最深刻的项目是使用STM32F103C8T6制作的智能温控风扇。这个项目是在根据环境温度自动调节风扇转速,实现节能和舒适的效果。








#include "stm32f10x.h"
#include "delay.h"
#include "adc.h"
#include "pwm.h"

#define TEMP_THRESHOLD 30  // 温度阈值

int main(void)
{
    uint16_t tempValue;
    float temperature;

    // 初始化
    ADC_Init();
    PWM_Init();

    while(1)
    {
        // 读取温度传感器值
        tempValue = ADC_GetConversionValue(ADC1);
        // 转换为实际温度
        temperature = (float)tempValue * 3.3 / 4095 * 100;

        if(temperature > TEMP_THRESHOLD)
        {
            // 根据温度差值计算PWM占空比
            uint16_t duty = (temperature - TEMP_THRESHOLD) * 10;
            PWM_SetDutyCycle(duty);
        }
        else
        {
            PWM_SetDutyCycle(0);  // 温度低于阈值,风扇停转
        }

        delay_ms(500);
    }
}

③从F系列到H系列的开发与移植,其实算蛮多的,我记得之前做一下电源曲线处理,刚开始是用的446做图像处理,反正就是各种不流畅,后面换成了H7后,不知道这个是多完美,因为STM32H7拥有更高的主频和更强大的浮点运算能力,能更好地满足图像处理的需求。移植过程中,首先要解决的是时钟配置问题,STM32H7的时钟系统比F系列的复杂得多,需要仔细配置PLL和分频系数。其次是外设驱动的移植,由于H7的外设寄存器地址和功能与F有所不同,需要重新编写驱动代码。要重新配置DMA和DCMI模块。

总结一下,H7处理速度大幅提升,原本需要几秒才能完成的图像处理任务,现在只需几百毫秒,效果十分显著。

④那我说一下首次使用STM32CUBEMX的感受,刚开始的时候是自己去弄那个寄存器,自从首次使用STM32官方软件STM32CubeMX时,我被它的图形化配置界面所吸引。通过简单的拖拽和设置,就能快速生成初始化代码,大大节省了开发时间。同时,它还能对芯片的外设进行直观的配置和预览,方便开发者理解和调试。

不过呢,使用STM32CUBEMX还是有很多的不顺利,也有需要手动调整的,不过总体来说还是降低了开发难度与加快了开发效率。

CM_STM32 回答时间:3 天前

刚接触到stm32,是跟着B站视频学习用的STM32F103C8T6,当时学的还是标准库,初始化需要通过函数操作,稍微比较繁琐,不过还是跟着教程啃下来了,比寄存器操作还是方便很多;后面用到各种各样的屏幕、模块等,也学会跟着例程移植到自己目标的芯片了。后来接触到了hal库,实在是太方便了,图形化配置简化了很多流程,画板子的时候也可以根据引脚图来决定引脚分配,效率大幅度提升;非常喜欢STM32的生态和产品,主要是因为软件生态友好、而且社区文档资源丰富,而且论坛还挺活跃!!!

后来打比赛、做项目也是越用越多,也是学习了STM32的无线、GUI等功能,用了CubeMX的中间件和TouchGFX Designer等工具,现在各种各样型号的开发板也是越攒越多(p.s. ST官方板子画的真的很好看,而且原理图和PCB都开源,一些设计也是参考着工程文件做的);19f0bc989716d42909297ff07933a183.jpg

(后面尝试用STM32G431做了一些小项目,学习一下BLDC的FOC控制,虽然这个不是第一次用了,但是嘴皮子停不下来) image.png 总结一下钟爱STM32的原因,就是STM32在生态链和完整的产业布局,从芯片到hal库和ll库,还有各种方便开发设计的middleware,再加上市面上很多模块、屏幕都有stm32f103的例程,移植起来非常方便!!

CM_STM32 回答时间:3 天前

150 亿颗的里程碑,是 STM32 深耕嵌入式领域的硬核见证!恭喜意法半导体,也愿每一颗芯片都能赋能更多创新项目!

背影101 回答时间:前天 10:06

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

背影101 回答时间:前天 10:09

不算跨行吧,本来就是搞硬件的,这算是嵌入式硬件工程师了吧 从23年换工作开始,带我入行的也是位老师傅,软件硬件全都懂,经常自己写个小代码输出想要波形,当时就觉得好厉害啊。 然后就开始自己琢磨,自己网上找视频学习,也进入了ST大论坛,犹记得当初第一块板子是C092,使用的软件是IDE,当时感觉好蒙啊,这都该怎么设置啊,当时老师傅都走了,只能自己慢慢摸索。 从第一次输出自己想要的波形开始,慢慢胆子也开始大了起来,最后直接能够通过串口来控制波形,进而通过串口来控制电机。成就感立马就上来了。 到现在是一发不可收拾了,在st的路上越走越远,希望能够见证st的辉煌,并有幸陪着走一段,等到老了回忆起来,也是一段美好的回忆。 2026一起加油!

Xa__ 回答时间:前天 11:06

恭喜STM32出货150亿颗,其中有我

行色匆匆 回答时间:前天 14:18

都150亿颗了,恭喜意法半导体!

STMWoodData 回答时间:前天 16:21

恭喜STM32出货150亿颗

无垠的广袤 回答时间:前天 17:06

恭喜STM32出货150亿颗

无垠的广袤 回答时间:前天 17:27

我与STM32的故事

首次使用STM32产品是3年前,型号NUCLEO-H755ZI-Q;

NUCLEO-H755ZI-Q.jpg

选型原因:当时做实验需要用单片机测试步进电机驱动,考虑到需长期稳定运行、且需要不间断处理采集数据等要求,因此选择STM32H7系列。

使用过程:通过LAN网络连接实现远程通信,串口调试GPIO控制步进电机驱动板,结合LabVIEW上位机和MQTT协议,实现步进电机旋转角度和速度的远程控制和数据采集。

data_acquisition_labview_step-motor.gif

使用感受:运行非常稳定,且结合STM32CubeMX和CubeIDE开发程序十分便捷,极大地提升了开发效率。

无垠的广袤 回答时间:前天 17:55

项目考古 :

使用 STM32 印象最深刻的项目是 STM32G431RB 驱动无刷电机和步进电机。

NUCLEO-G431RB.jpg

项目介绍

使用 NUCLEO-IHM03 电机套件驱动直流无刷电机和步进电机,实现运动控制。

NUCLEO-G431RB_Motor.jpg

工程代码

/* USER CODE BEGIN PV */
volatile uint8_t  bldc_enable = 0;          // 1 运行, 0 停止
volatile uint16_t adc_duty;                 // 0-4095
/* USER CODE END PV */

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();

  HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&adc_duty, 1);
  HAL_TIM_Base_Start_IT(&htim2);            // 1 ms 时基
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // 启动定时器,占空比 0
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);

  while (1)
  {
      __WFI();
  }
}

BLDC 参数配置

#include "bldc_6step.h"
extern TIM_HandleTypeDef htim1;
extern volatile uint16_t adc_duty;
extern volatile uint8_t  bldc_enable;

static const uint8_t step_table[6][3] = {
  {1,0,0}, {1,1,0}, {0,1,0}, {0,1,1}, {0,0,1}, {1,0,1}
}; // 高边 1 导通 0 关断,低边固定互补

static uint8_t step = 0;

void bldc_commutate(void)
{
    if(!bldc_enable){
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);
        __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 0);
        return;
    }
    uint32_t duty = (adc_duty * htim1.Init.Period) >> 12; // 0~Period
    /* 设置三路占空比 */
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, step_table[step][0] ? duty : 0);
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, step_table[step][1] ? duty : 0);
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, step_table[step][2] ? duty : 0);
    step = (step + 1) % 6;
}

效果

motor.gif

xhackerustc 回答时间:前天 20:41

恭喜STM32出货150亿颗,期待STM32芯片继续大卖

LSMing1623 回答时间:昨天 08:14

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

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