2. 开发环境搭建:Keil MDK安装与配置、STM32CubeMX初始化工程、串口驱动安装与调试
好,咱们正式开始动手了。这一章,说白了就是「磨刀」。刀磨快了,后面砍柴才不费劲。我见过不少新手,上来就急着写代码,结果环境没配好,编译报错半天找不到原因,白白浪费一整天。嗯,咱们别走那个弯路。
2.1 Keil MDK 安装与配置
Keil MDK,这是咱们嵌入式开发最常用的IDE之一。我个人习惯用MDK 5.38版本,稳定,兼容性好。你问为什么不用最新的?我在项目中遇到过,新版本对某些老芯片支持反而不好,折腾半天不如用个稳妥的。
安装步骤
- 下载安装包:去Keil官网下载MDK-ARM。注意选对版本,别下成C51了,那是给51单片机用的。
- 运行安装程序:一路Next就行。但有个坑——安装路径不要有中文。我曾经帮一个同事排查问题,搞了俩小时,最后发现是路径里有个「项目」两个字,编译器直接罢工了。
- 激活License:安装完会弹出一个License Management窗口。把你的许可证码填进去,点Add LIC。如果提示错误,八成是杀毒软件拦截了,关掉再试。
- 安装芯片包:打开Keil,点击菜单栏的
Pack Installer。找到你的芯片型号,比如STM32F103C8,点Install。这一步很多人会忘,结果新建工程时找不到芯片,急得团团转。
配置要点
安装完别急着关,咱们做几个关键配置:
- 编译器版本:在
Project -> Manage -> Project Components里,把编译器选成V6。V6编译速度快,生成的代码也更小。我刚开始用V5,后来换了V6,编译时间从40秒降到了15秒,爽多了。 - 输出路径:建议把输出文件放到单独的文件夹,比如
Output。不然工程目录下全是.hex、.map文件,乱得很。 - 调试器设置:如果你用ST-Link,在
Debug选项卡里选ST-Link Debugger,然后点Settings,把SWD勾上。别选JTAG,占用的引脚多,没必要。
2.2 STM32CubeMX 初始化工程
STM32CubeMX,这是ST官方出的图形化配置工具。说白了,就是帮你自动生成初始化代码。你想想看,以前配置一个定时器,要翻几百页的参考手册,现在点几下鼠标就搞定了,多省事。
创建工程
- 选择芯片:打开CubeMX,点
New Project。在Part Number里输入你的芯片型号,比如STM32F103C8。双击选中。 - 配置时钟:进入
Clock Configuration页面。我建议先把HSE和LSE都打开,然后让软件自动计算时钟树。点一下HCLK输入框,输入72,回车,系统会自动调整分频系数。如果提示红色错误,说明时钟配置不合理,调整一下PLL参数就行。 - 配置外设:在
Pinout & Configuration页面,找到你要用的外设。比如串口,点USART1,Mode选Asynchronous。下面会自动分配TX和RX引脚。嗯,这里要注意,有些芯片的引脚是复用的,别跟其他外设冲突了。 - 生成代码:点
Project Manager,填好工程名和路径。Toolchain选MDK-ARM V5。然后点右上角的GENERATE CODE。搞定。
个人经验
我在项目中遇到过一个问题:用CubeMX生成的代码,下载到板子上跑不起来。查了半天,发现是CubeMX版本太旧,生成的HAL库跟Keil里的不匹配。解决办法很简单:保持CubeMX和Keil的HAL库版本一致。建议都用最新版,或者都用某个稳定版。
2.3 串口驱动安装与调试
串口,这是嵌入式开发中最常用的调试手段。说白了,就是往电脑上打印信息,看看程序跑到哪了、变量值是多少。没有串口,调试就像闭着眼睛走路,全靠猜。
驱动安装
市面上常见的USB转串口芯片有CH340、CP2102、FT232等。不同芯片的驱动不一样:
| 芯片型号 | 驱动名称 | 常见问题 |
|---|---|---|
| CH340 | CH340SER.EXE | Win10以上系统需禁用驱动签名 |
| CP2102 | CP210x Universal Windows Driver | 安装后需重启电脑 |
| FT232 | FTDI VCP Driver | 注意区分2.0和3.0版本 |
安装步骤很简单:下载对应驱动,双击安装,插上USB转串口模块,看设备管理器里有没有出现新的COM口。如果出现黄色感叹号,说明驱动没装好。我曾经遇到过,CH340在Win10上死活装不上,最后发现是系统开启了「驱动程序强制签名」,关掉就好了。
调试技巧
驱动装好了,怎么用?我推荐两个工具:
- 串口调试助手:比如SSCOM、Putty。设置好波特率(一般115200)、数据位(8)、停止位(1)、校验位(None),打开串口,就能看到板子发来的数据了。
- 逻辑分析仪:如果串口数据不对,比如乱码、丢数据,用逻辑分析仪抓一下波形。看看波特率对不对,电平是否正常。我有个项目,串口一直乱码,查了三天,最后用逻辑分析仪发现是板子上的晶振频率不对,导致波特率偏差太大。
代码示例
用HAL库发送一串数据,代码很简单:
#include "main.h"
#include "usart.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
uint8_t msg[] = "Hello, 电梯召唤面板!\r\n";
while (1)
{
HAL_UART_Transmit(&huart1, msg, sizeof(msg), 1000);
HAL_Delay(1000);
}
}
这段代码,说白了就是每隔1秒发一次「Hello, 电梯召唤面板!」。你把它下载到板子上,打开串口助手,就能看到数据了。如果看不到,别慌,按上面的调试口诀一步步排查。
好了,环境搭好了,串口也能用了。下一章咱们就开始写真正的电梯召唤面板代码了。嗯,到时候你会感谢现在认真搭环境的自己。