1. 课程导学与开发环境搭建

各位同学好,我是你们这门课的老周。做嵌入式开发十几年了,从51单片机一路折腾到现在的ARM Cortex-M系列。今天咱们开始第一讲,先把路铺好。

说实话,很多初学者一上来就急着写代码,结果卡在环境配置上半天搞不定。我见过太多人因为Keil装不对、CubeMX生成不了代码,直接劝退了。所以这一章,咱们把地基打牢。

1.1 课程目标:你到底能学到什么?

这门课不是讲理论,是实打实的动手课。学完之后,你至少能做到三件事:

  • 独立驱动STM32外设:GPIO、定时器、ADC、UART、SPI、I2C,这些常用外设,你能自己写代码调通。
  • 把FreeRTOS移植到项目里:任务创建、消息队列、信号量、中断管理,这些RTOS核心机制,你能用起来。
  • 完成一个物联网实战项目:从传感器采集、数据上报到云端交互,完整走一遍。

核心目标:让你从「照着例程改」变成「自己设计驱动架构」。说白了,就是给你一套方法论,以后换芯片、换外设,你心里不慌。

1.2 STM32选型建议:别盲目跟风

经常有人问我:「老周,学STM32该买哪块板子?」我的回答是:看你的项目需求。

我整理了一个选型对照表,你对着看就清楚了:

系列 内核 主频 Flash 典型应用 推荐场景
STM32F103 Cortex-M3 72MHz 64KB-512KB 工业控制、电机驱动 入门首选,资料最多
STM32F407 Cortex-M4F 168MHz 512KB-1MB 音频处理、图形界面 需要DSP或浮点运算
STM32L4系列 Cortex-M4F 80MHz 256KB-1MB 低功耗传感器、穿戴设备 电池供电项目
STM32H7系列 Cortex-M7 480MHz 1MB-2MB 高性能计算、AI边缘 预算充足、性能要求高

我的建议:如果你是自学入门,直接买一块STM32F103C8T6的最小系统板,十几块钱,够你折腾大半年。别一上来就上H7,那玩意儿配置复杂,容易打击信心。

1.3 Keil MDK与CubeMX安装

环境搭建这块,我踩过不少坑。下面把步骤拆开讲,你照着做就行。

1.3.1 Keil MDK安装

Keil MDK是ARM的官方IDE,虽然界面老气,但稳定。我到现在还在用,习惯了。

  1. 下载安装包:去Keil官网下载MDK-ARM最新版。注意选对版本,别下成C51了。
  2. 安装路径:我个人习惯装到D盘,不要有中文路径。曾经有个学员装到「程序文件」文件夹里,编译死活报错,折腾了两小时。
  3. 注册:安装完后需要注册。如果你是学生,可以用评估版(32KB代码限制),但做项目建议买正版或找学校申请License。
  4. 安装器件包:打开Keil,点击 Pack Installer,找到你用的芯片型号,比如STM32F103C8,点击Install。

避坑指南:我曾经遇到过Keil安装后打不开,提示缺少DLL。原因是杀毒软件把破解文件隔离了。安装时记得关掉杀毒软件,或者添加信任目录。

1.3.2 STM32CubeMX安装

CubeMX是ST官方的图形化配置工具,能帮你生成初始化代码。说白了,就是让你不用手写寄存器配置,省时间。

  1. 下载:去ST官网搜索STM32CubeMX,下载最新版。需要注册账号,免费。
  2. 安装Java环境:CubeMX基于Java,所以你得先装JRE。我建议装Java 8或11,太新的版本反而有兼容问题。
  3. 安装固件包:打开CubeMX,点击 Help → Manage embedded software packages,选择你用的芯片系列,比如STM32F1,下载对应固件包。

小技巧:固件包下载很慢,我一般晚上挂机下。或者去ST官网手动下载,然后放到CubeMX的仓库目录里,路径一般是 C:\Users\你的用户名\STM32Cube\Repository。

1.4 STM32CubeMX工程生成流程

这一步是重点。我带你走一遍完整的流程,从新建工程到生成代码。

1.4.1 新建工程

打开CubeMX,点击 New Project,在 Part Number 里输入你的芯片型号,比如STM32F103C8T6。双击选中,进入配置界面。

1.4.2 配置时钟树

时钟是STM32的心脏。配置不对,外设跑不起来。

  • 在 Clock Configuration 标签页里,把HSE(外部高速晶振)设为8MHz。
  • PLL倍频到72MHz(F103的最高主频)。
  • APB1和APB2总线时钟按默认就行,一般APB1是36MHz,APB2是72MHz。

注意:如果你用的是内部晶振(HSI),精度不够,串口通信容易丢数据。我建议项目里都用外部晶振,稳定。

1.4.3 配置外设

以最常用的USART1为例:

  1. 在 Pinout & Configuration 里,找到 USART1,Mode选 Asynchronous。
  2. 波特率设115200,数据位8,停止位1,无校验。
  3. 看右边的引脚图,PA9和PA10会自动变成TX和RX。

1.4.4 生成代码

点击 Project → Generate Code,设置工程名和路径。IDE选MDK-ARM,Toolchain Version选你装的Keil版本。

生成完成后,用Keil打开工程,你会看到CubeMX已经帮你生成了初始化代码。你只需要在 main.c 的 while(1) 里写业务逻辑就行。

// 生成的main函数骨架
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();

  while (1)
  {
    // 你的代码写在这里
  }
}

重要提醒:每次在CubeMX里修改配置后重新生成代码,它会覆盖你之前写的 main.c。我习惯把业务逻辑写在单独的文件里,比如 app.c,这样不会被覆盖。

1.5 本章知识体系总览

下面这张图,把本章的核心内容串起来了。你保存下来,后面忘了可以回来看。

第一章知识体系结构图 第一章:课程导学与开发环境搭建 课程目标 外设驱动 + RTOS + 实战 STM32选型建议 F103 / F407 / L4 / H7 Keil MDK安装 IDE + Pack + License CubeMX安装 Java + 固件包 工程生成流程 新建 → 时钟 → 外设 → 生成 💡 学习建议 先装环境 → 跑通第一个工程 → 再深入外设驱动

1.6 本章小结

这一章咱们把路铺好了。你有了开发环境,知道了怎么选芯片,也走了一遍CubeMX的工程生成流程。接下来,我会带你从GPIO开始,一个一个外设啃下来。

记住一句话:环境搭好了,后面的事就顺了。别急,慢慢来。