资讯动态

STM32 从 0 到 1 做智能家居(二):把开发环境一次配好

发布时间:2026/10/27 18:56:58 来源:尧图企业网站定制
文章目录一、环境没配好后面每一步都在还债二、安装 Keil MDK5三、安装 STM32CubeMX四、ST-Link 驱动五、串口驱动与串口助手5.1 安装 USB 转 TTL 驱动5.2 串口助手参数5.3 两个细节六、本地起一个网页服务H5七、最重要的一条纪律只写 USER CODE自己新增的文件放哪里7.1 .c 文件加进 Keil 工程组7.2 .h 文件靠 Include Paths不靠 Add Files7.3 顺带说清 .c 和 .h 的分工八、装完先做一次冒烟测试九、本章易错点总结十、小结与下一篇系列第二篇。上一篇把要做什么、模块怎么连、数据怎么流定下来了这一篇把写代码之前的工具链全部装好并且立下一条贯穿全项目的纪律。适合人群已经想清楚项目结构准备真正打开 Keil 动手的同学。一、环境没配好后面每一步都在还债我做第一个 STM32 项目时最崩溃的不是代码写不出来而是根本不知道问题出在哪一层烧录失败是 ST-Link 驱动没装还是芯片没识别编译报错是缺固件包还是路径里有中文串口没打印是波特率错了还是printf重定向没生效这三类问题只要环境本身是干净的都能在几分钟内定位。但如果环境带着毛病你就会在写代码和修环境之间反复横跳最后连自己改了什么都不知道。所以这一篇的目标很明确装完、配完、验证完一个都不留到后面。装完之后你应该达到这个状态检查项达标标准Keil能新建工程并选到STM32F411RETx固件包Pack Installer 里Keil::STM32F4xx_DFP已安装CubeMX能生成 F4 系列工程且固件包版本确定ST-LinkKeil 的 Debug 设置里能读到芯片 IDCODE串口助手115200 8N1 能收到板子打印的文本H5本地http://localhost:8000能打开页面二、安装 Keil MDK5安装Keil MDK 5.36 及以上。安装路径必须是纯英文、无空格例如D:\Keil_v5。这一点别嫌麻烦。路径里带中文或空格轻则编译报奇怪的错误重则链接阶段直接失败而且报错信息完全指不到真正原因。打开 Keil → 点工具栏的Pack Installer→ 搜索STM32F4→ 安装Keil::STM32F4xx_DFP。DFP 就是器件支持包。没有它Keil 根本不认识 STM32F411 这颗芯片新建工程时设备列表里是空的。验证Options for Target → Device里能选到STM32F411RETx才算真的装好。小提醒Pack Installer 下载慢是常态可以挂着去装 CubeMX不用干等。三、安装 STM32CubeMX安装CubeMX 6.x同样放英文路径。首次启动 →Help → Manage embedded software packages→ 安装STM32F4固件包建议1.27.x 或 1.28.x。把固件包版本记下来。为什么一定要记版本因为 CubeMX 生成的 Keil 工程会引用这个固件包路径版本对不上时换一台电脑打开工程就可能满屏红叉。团队协作时这一步尤其重要。四、ST-Link 驱动插上 ST-Link打开设备管理器出现STMicroelectronics STLink dongle就说明驱动正常。Keil 里配置Options for Target → Debug选ST-Link Debugger→ 点Settings。在SW Device区域能看到一列IDCODE才说明电脑真正连上了芯片。如果这里显示No target connected先别怀疑程序按顺序查板子有没有供电只插 ST-Link 不一定给板子供电SWDIO / SWCLK / GND 三根线是否接对芯片是否处于复位或低功耗状态按住复位再点连接试试。五、串口驱动与串口助手串口助手是我们后面调试的眼睛。但在打开它之前得先让电脑看见这个串口——没有 COM 口串口助手装得再好也白搭。5.1 安装 USB 转 TTL 驱动STM32 输出的是 TTL 电平电脑只认 USB中间靠一块USB 转 TTL 模块常见芯片 CH340、CP2102、FT232做转换。这个模块需要驱动。第一步确认你手上模块的芯片型号。模块背面或芯片丝印上一般能直接看到芯片常见丝印驱动来源CH340 / CH341CH340G、CH340C沁恒官网CH341SER.EXECP2102 / CP2104CP2102Silicon LabsCP210x VCP DriverFT232FT232RLFTDI 官网 VCP 驱动第二步装驱动。优先用芯片厂商官网的驱动别用来路不明的万能串口驱动这类驱动经常版本老旧装上反而频繁蓝屏。Windows 10/11 有时会通过 Windows Update 自动装好插上就有 COM 口那就什么都不用做。CH340 的安装包右键以管理员身份运行装完建议重启一次。第三步验证。插上 USB 转 TTL先别接 STM32排除接线干扰右键此电脑 → 管理 →设备管理器展开端口 (COM 和 LPT)应该出现类似USB-SERIAL CH340 (COM6)记住这个 COM 号串口助手打开时要选它。如果看不到这一项或者出现一个带黄色感叹号的未知设备按下面顺序排查现象原因处理完全没有任何新设备USB 线是只充电线没有数据线芯换一根确定能传数据的线黄色感叹号 / 未知设备驱动没装或装错型号卸载设备重装对应芯片驱动有 COM 口但打不开被其他软件占用另一个串口助手、Keil 的串口窗口关掉占用它的软件再打开端口号是 COM10 以上助手列表里没有部分老版本串口助手只枚举 COM1~COM9设备管理器 → 端口属性 → 端口设置 → 高级 → 改成 COM3 之类换了个 USB 口COM 号变了Windows 按设备端口分配号正常现象重新在助手里选新号还有一个新手常忽略的点USB 转 TTL 必须和 STM32 共地并且接线要交叉——模块的RX 接 STM32 的 TXPA9模块的TX 接 STM32 的 RXPA10。接反的典型现象是能发不能收或者干脆一片空白。5.2 串口助手参数驱动装好、COM 口出现之后打开串口助手参数必须固定参数值端口设备管理器里看到的 COM 号波特率115200数据位8停止位1校验无流控无5.3 两个细节接收区不要勾十六进制显示。我们要看的是[MODE] Manual ...这种文本日志勾了十六进制就只剩一串5B 4D 4F 44 45 5D没法读。编码选 UTF-8 或 GBK 都行。本项目的printf全部是纯 ASCII所以不会出现中文乱码问题。六、本地起一个网页服务H5后面的 H5 页面用了mqtt.js的 CDN 和wss连接。直接双击index.html也就是file://协议有时会被浏览器的安全策略拦住表现为页面能开、但 MQTT 一直连不上。推荐用 Python 起一个本地静态服务器cdd:\IOT_Experiment\ZLRC_Experiment\STM32_SCH_project\project\8.HAL_SmartHome\3.H5界面\4班智能家居python-m http.server 8000然后浏览器打开http://localhost:8000这样页面就走http://协议WebSocket 和 CDN 都不会被限制。页面改完记得按Ctrl F5硬刷新。浏览器缓存非常顽固代码改了但页面没变十有八九是缓存不是代码。七、最重要的一条纪律只写 USER CODE这一节比前面所有安装步骤都重要因为它是唯一一个会让你白干几小时的坑。CubeMX 生成的.c/.h文件里到处是这种成对出现的标记/* USER CODE BEGIN 2 */// 你的代码写这里/* USER CODE END 2 */规则只有一条位置点 GENERATE CODE 之后两个标记中间保留你的代码两个标记外面直接覆盖写了也会丢我第一次踩这个坑时在main.c的while(1)外面加了一整段初始化代码调通之后回 CubeMX 改了一个引脚再点生成——那段代码连同当时的调试思路一起消失了。更痛苦的是我一开始还以为是 Keil 工程坏了。所以请从现在开始养成习惯所有人工代码只写在USER CODE BEGIN/END之间每次点GENERATE CODE之前先确认没有代码写在标记外面生成后先编译一次确认没有丢东西再继续。自己新增的文件放哪里除了改生成代码我们还要写三个自己的驱动模块HAL_SmartHome\ └─ App\ ├─ DHT11.c / DHT11.h 温湿度单总线 ├─ ens160.c / ens160.h 空气质量I2C └─ mqtt.c / mqtt.h ESP-AT MQTT放在App\目录下有两个好处CubeMX 不管这个目录所以怎么改都不会被覆盖结构清晰和生成代码彻底分开出问题一眼就知道该看哪边。但要注意文件放进文件夹 ≠ 加入工程。而且.c和.h的处理方式完全不同这一步必须分开做。7.1.c文件加进 Keil 工程组.c文件里是真正的函数实现必须参与编译。做法在 Keil 左侧工程树里右键Target 1→Manage Project Items在Groups里新建一个组命名为App选中App组点右侧Add Files把DHT11.c、ens160.c、mqtt.c三个文件加进去点 OK 保存。只放文件夹不加工程编译时不会报错但链接时会报L6218E: Undefined symbol ReadData (referred from main.o)看到这个错误第一反应就应该是.c没加进 Keil 工程。7.2.h文件靠 Include Paths不靠 Add Files.h文件里只有函数声明、宏定义和类型定义它不参与编译不需要也不应该加进App组去编译。编译器找头文件靠的是搜索路径不是工程文件列表。所以真正要做的是告诉 KeilApp这个目录也要去搜。做法点魔术棒Options for Target→ 切到C/C选项卡找到Include Paths点右边的...新增一行填..\App相对于.uvprojx所在目录确定保存然后重新编译。..\App是相对路径工程整体挪到别的电脑上也不会失效用绝对路径D:\...\App换台电脑就会找不到。验证方法很简单在main.c的USER CODE BEGIN Includes里写#includeDHT11.h编译。如果报下面的错误就是 Include Paths 没加对error: cannot open source input file DHT11.h如果编译通过说明头文件已经能被正确找到。可以在Manage Project Items里顺手把.h也 Add 进App组这样工程树里能直接双击打开、方便查看。但要清楚它只是显示在树里并不解决找不到头文件的问题Include Paths 该加还得加。7.3 顺带说清.c和.h的分工文件放什么是否需要加入工程DHT11.c函数实现、私有变量必须 Add Files 到App组DHT11.h函数声明、宏、extern声明不需要但要加进 Include Pathsmain.c顶部#include DHT11.h已有文件无需操作头文件里记得加防重复包含保护否则多个.c互相包含时会报重复定义#ifndef__DHT11_H#define__DHT11_H/* 声明写这里 */#endif八、装完先做一次冒烟测试环境全部装好后不要急着写传感器代码。先做一个最小的冒烟测试用 CubeMX 新建一个 F411 工程只开 USART1生成代码Keil 里勾上Use MicroLIB在main()的while(1)里加一句printf(hello stm32\r\n);HAL_Delay(1000);编译、烧录、打开串口助手115200。如果每秒能看到一行hello stm32说明这几件事同时成立了时钟配置正确否则波特率会偏收到乱码下载链路正常串口助手参数正确printf重定向和 MicroLIB 都生效了。这一步通过后面的所有调试才有可信的观察窗口。九、本章易错点总结现象真正原因正确做法编译或链接报莫名其妙的错误Keil 装在带中文或空格的路径下装到D:\Keil_v5这类纯英文无空格路径新建工程时找不到 STM32F411RETx没装Keil::STM32F4xx_DFPPack Installer 里安装 DFP 后再新建串口全是乱码或完全没输出波特率不是 115200或printf没重定向串口助手固定 115200 8N1重定向到 USART1printf有代码但一个字符都不出Keil 没勾Use MicroLIBOptions for Target → Target → Use MicroLIB改了一次引脚之前写的代码全没了代码写在USER CODE标记外面只写在 BEGIN/END 之间生成前检查一遍编译通过但链接报L6218E Undefined symbol新增的.c只放进文件夹没加进 Keil 工程Manage Project Items里 Add FilesH5 页面能打开但 MQTT 连不上用file://直接双击打开的用python -m http.server 8000起本地服务改了 H5 代码但页面没变化浏览器缓存按Ctrl F5硬刷新十、小结与下一篇这一篇做完工具链已经齐了而且验证过Keil 能识别 F411DFP 已装CubeMX 能生成工程固件包版本已记录ST-Link 能读到芯片串口助手能收到文本H5 能用本地服务器打开最重要的所有代码只写在USER CODE里自己的驱动统一放App\。下一篇开始动硬件电源与共地怎么接、每个模块接哪个引脚、拨码开关怎么做 USART2 二选一以及上电前的自检清单。接线是后面所有问题的源头值得单独用一篇讲透。如果这篇文章对你有帮助欢迎点赞收藏。系列更新中下一篇见。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑