2、开发环境搭建:安装Keil MDK或STM32CubeIDE,配置工程模板,安装必要的驱动和库文件
好,咱们正式开始动手了。这一章要解决一个最基础的问题——把吃饭的家伙先支棱起来。
嵌入式开发,说白了就是跟芯片打交道。你得有个趁手的工具,才能把代码烧进去、跑起来、看结果。我个人习惯用Keil MDK,但STM32CubeIDE这两年也越来越成熟。你选哪个都行,关键是别在环境搭建上卡太久。
2.1 选哪个?Keil MDK vs STM32CubeIDE
先说说我的看法。如果你刚入门,我建议直接上STM32CubeIDE。为什么?因为它免费,而且集成了CubeMX,图形化配置外设特别方便。Keil MDK虽然老牌,但商用要收费,学生版有代码大小限制。
但如果你以后要去公司干活,很多老项目还是用Keil。我第一份工作进公司,打开工程一看,MDK 5.14,那叫一个怀旧。所以我的建议是:
- 个人学习、新项目 → STM32CubeIDE
- 跟公司项目走、兼容旧代码 → Keil MDK
嗯,这里要注意:两个IDE的工程文件不通用。你选了哪个,后面就别来回切了,不然光是移植驱动就能折腾一整天。
2.2 安装Keil MDK(以MDK 5.38为例)
如果你决定用Keil,那咱们一步步来。我曾经帮一个同事装环境,他下载了个精简版,结果调试器死活连不上,折腾了两小时才发现是驱动没装全。所以,别偷懒。
2.2.1 下载与安装
- 去Keil官网(www.keil.com)下载MDK-Arm。注意版本,别下成C51了,那是给51单片机用的。
- 双击安装包,一路Next。安装路径我建议别带中文,也别放C盘根目录。我习惯放
D:\Keil_v5。 - 安装完成后,打开Keil uVision5。第一次启动会弹出一个Pack Installer窗口,别关,后面要用。
2.2.2 安装器件支持包(Pack)
Keil本身只是个壳,你得给它装对应芯片的Pack才能用。比如你用STM32F103C8T6,就得装STM32F1系列的Pack。
在Pack Installer里,左侧找到你的芯片型号,右侧点Install。如果网速慢,可以去官网手动下载.pack文件,然后双击安装。
2.2.3 安装调试器驱动
你总得有个东西把程序烧进芯片吧?常用的有J-Link、ST-Link、DAP-Link。
- ST-Link:买STM32开发板一般都自带,驱动去ST官网下,或者装完STM32CubeProgrammer会自动装好。
- J-Link:SEGGER官网下载驱动,安装后记得把JLinkARM.dll拷贝到Keil安装目录的ARM\Segger文件夹下。
- DAP-Link:免驱,但Keil里要选CMSIS-DAP Debugger。
我遇到过最坑的一次:J-Link驱动装好了,Keil里也识别了,但就是连不上板子。后来发现是J-Link固件版本太老,升级了一下就好了。所以,如果你连不上,先看看调试器的固件是不是最新的。
2.3 安装STM32CubeIDE
如果你选STM32CubeIDE,那省心多了。它把编译器、调试器、CubeMX都打包在一起了。
2.3.1 下载与安装
- 去ST官网搜索STM32CubeIDE,下载对应操作系统的版本。Windows就下.exe,Linux下.tar.gz。
- 安装过程很简单,一路默认就行。它会自动帮你装好ST-Link驱动和GCC编译器。
- 第一次启动会提示你选择工作空间(Workspace)。我习惯放
D:\STM32Workspace,别放桌面,不然项目多了乱得很。
2.3.2 配置工程模板
我个人习惯建一个空的模板工程,把常用的外设配置好,比如GPIO、UART、定时器。以后每次开新项目,直接复制这个模板,省得每次都要重新配时钟树。
具体做法:
- 新建一个STM32工程,选好芯片型号。
- 在CubeMX里配好HSE、LSE、系统时钟(一般先配到最高主频)。
- 使能UART1(用于打印调试信息),配好GPIO(比如板载LED)。
- 生成代码,然后把这个工程文件夹压缩保存。下次用的时候解压,改个名字就行。
2.4 安装必要的驱动和库文件
环境搭好了,但光有IDE还不够。你得把「跟芯片沟通的桥梁」搭好。
2.4.1 串口驱动(CH340/CP2102)
很多开发板用的是CH340或CP2102做USB转串口。Windows 10以上系统一般能自动识别,但如果识别不了,去官网下驱动手动装。
我遇到过一个问题:CH340驱动装好了,设备管理器里也看到了,但串口助手就是打不开。后来发现是波特率设置不对,板子默认115200,我设成了9600。嗯,这种低级错误犯过一次就不会再犯了。
2.4.2 STM32 HAL库 / LL库
如果你用STM32CubeIDE,HAL库是自动下载的。但如果你用Keil,需要手动添加。
有两种方式:
- 方式一: 在Keil的Pack Installer里,找到对应芯片的DFP(Device Family Pack),里面包含了HAL库。
- 方式二: 去ST官网下载STM32CubeF1(或其他系列)的固件包,解压后把Drivers文件夹复制到工程目录下。
我个人推荐方式一,因为Pack会跟着Keil版本更新,兼容性好。方式二适合你不想联网的时候用。
2.4.3 第三方库(如FreeRTOS、FatFS)
如果你的项目要用到操作系统或文件系统,建议提前把库文件准备好。
我一般会在模板工程里预留一个 ThirdParty 文件夹,把常用的库源码放进去。比如:
Project_Template/
├── Core/
│ ├── Inc/
│ └── Src/
├── Drivers/
│ ├── CMSIS/
│ └── STM32F1xx_HAL_Driver/
├── ThirdParty/
│ ├── FreeRTOS/
│ └── FatFS/
└── MDK-ARM/
这样以后加功能,直接复制粘贴,不用再去找库的下载链接。
2.5 验证环境是否搭好
环境搭没搭好,跑个点灯程序就知道了。这是嵌入式界的「Hello World」。
新建一个工程,配置好GPIO(比如PA5接LED),写个简单的循环翻转电平:
while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(500);
}
编译通过,下载到板子,LED开始闪烁。嗯,成了。
如果LED不亮,别慌。先检查:
- 板子供电了吗?
- 调试器连接正确吗?
- LED对应的GPIO引脚对吗?(很多板子的LED是PB12或PC13,不是PA5)
- 时钟配置对了吗?(HSE还是HSI?)
我刚开始学的时候,点灯点了三天没亮,最后发现是LED焊反了。所以,硬件问题也要考虑进去。
2.6 本章小结
这一章内容不多,但很重要。环境搭不好,后面全是白搭。
你想想看,IDE装好了,驱动装全了,库文件也备齐了,接下来就可以安心写代码了。下一章咱们开始讲工程结构,怎么组织代码才能让项目不变成一坨浆糊。
好,先到这。去把环境装好,跑个点灯,然后回来继续。