第3章:STM32微控制器入门

好,咱们开始聊STM32。说实话,在医疗嵌入式领域,STM32几乎成了标配。我最早接触它是在一个便携式心电监护项目里,当时选型纠结了好几天,后来发现——嗯,这玩意儿确实能打。

3.1 STM32系列到底有哪些?

STM32是意法半导体(ST)的32位ARM Cortex-M内核微控制器。你想想看,从低功耗到高性能,从简单控制到复杂信号处理,它几乎全覆盖了。

我个人习惯把STM32分成几个梯队:

  • F0系列:Cortex-M0内核,48MHz主频。适合简单控制、传感器读取。我在一个输液泵项目里用过,成本敏感,够用。
  • F1系列:Cortex-M3内核,72MHz。经典款,资料最多。入门首选,我建议新手就从F103开始。
  • F4系列:Cortex-M4内核,带FPU(浮点运算单元)。适合做FFT、PID运算。医疗监护仪里经常见到它。
  • L系列:低功耗系列。比如L0、L4。便携式医疗设备,电池供电,必须用这个。
  • H7系列:双核,性能怪兽。高端医疗影像设备里偶尔会用到。

重点提醒:医疗设备选型,别只看性能。你得考虑供货稳定、温度范围(工业级-40~85°C)、以及是否有足够的安全认证资料。我在一个项目中吃过亏,选了颗冷门型号,结果量产时供货周期拉长到20周……

3.2 开发板怎么选?

这个问题,几乎每个学生都问过我。我的回答很简单:

  • 纯学习:买一块Nucleo-F103RB。便宜,自带ST-Link调试器,插上USB就能用。大概100块出头。
  • 做项目原型:买Discovery系列。比如STM32F4 Discovery,带屏幕、音频、传感器。我当年做心电算法验证,就是拿它跑的。
  • 医疗设备预研:直接上官方评估板(Eval Board)。接口全,方便接外部模拟前端(AFE)。

我的小建议:别买太便宜的盗版板子。调试器不稳定,你排查半天发现是硬件问题,心态会崩。我曾经被一块盗版板子坑了整整两天……

3.3 CubeMX工具——你离不开的帮手

STM32CubeMX,说白了就是一个图形化配置工具。你点点鼠标,它帮你生成初始化代码。省去了你翻数据手册配寄存器的痛苦。

我刚开始用的时候其实挺抗拒的,觉得「代码生成器不靠谱」。后来发现——真香。尤其是在医疗设备这种需要快速验证的场合,它能帮你把精力集中在业务逻辑上。

3.3.1 基本使用流程

  1. 选择芯片型号(比如STM32F103C8T6)
  2. 配置时钟树(HSE、PLL、系统时钟)
  3. 配置外设(GPIO、UART、ADC、定时器等)
  4. 配置中间件(FreeRTOS、USB、FATFS等)
  5. 生成代码(选择IDE:MDK、IAR、STM32CubeIDE)

避坑指南:时钟配置一定要仔细。我曾经在一个项目中,因为PLL配置错了,导致ADC采样频率偏差了5%,结果心电波形失真。排查了三天才发现是时钟问题……

3.3.2 一个简单的例子:点灯

咱们来点个灯。别小看这个,医疗设备里很多状态指示就是靠LED。

// 在CubeMX中配置:
// PB0 设置为 GPIO_Output
// 生成代码后,在main.c中添加:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);   // 亮
HAL_Delay(500);                                        // 延时500ms
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灭
HAL_Delay(500);                                        // 延时500ms

你看,就这么简单。HAL库封装好了底层操作,你只需要调用函数就行。

3.3.3 调试技巧

我习惯在CubeMX里把调试接口(SWD)单独配置出来。这样即使程序跑飞了,还能重新烧录。另外,建议开启一个UART串口,用来打印调试信息。医疗设备开发中,串口日志是救命稻草。

注意:量产时一定要关闭调试接口和串口打印。否则可能被黑客利用,或者影响EMC性能。我见过一个同行,产品上市后被客户投诉死机,结果发现是调试串口没关,干扰了心电信号……

3.4 小结

这一章我们聊了STM32的系列划分、开发板选型、以及CubeMX的基本使用。说白了,入门STM32并不难,关键是动手。我建议你今晚就下载CubeMX,配一个点灯工程,跑起来。相信我,当你看到LED闪烁的那一刻,你会觉得——嗯,这事儿我能干。

下一章,咱们会深入GPIO和中断,这是医疗设备实时控制的基础。到时候见。