第1章:开发环境搭建
各位同学,咱们正式开始做项目之前,第一件事就是把家伙事儿备齐。开发环境搭建这事儿,说难不难,说简单吧,我第一次搞的时候也踩过不少坑。今天我就带着大家,把Keil、STM32CubeIDE、ESP-IDF、LoRa驱动库、串口调试工具,一个一个搞定。
1.1 Keil MDK安装与配置
Keil MDK,说白了就是ARM芯片的编译器加调试器。咱们做LoRa停车位检测,主控芯片用的是STM32系列,所以Keil是绕不开的。
安装步骤:
- 去Keil官网下载MDK-Arm版本,目前最新的是V5.38。我个人习惯用V5.36,稳定。
- 双击安装包,一路Next。注意安装路径不要有中文,否则编译会报一些莫名其妙的错。
- 安装完成后,打开Keil,点击
Pack Installer,搜索你的芯片型号。比如STM32F103C8T6,勾上对应的Device Family Pack。 - 激活License。嗯,这里我就不多说了,大家懂的都懂。
⚠️ 注意: 我曾经遇到过一个问题——装完Keil后,编译时提示找不到芯片。后来发现是Pack没装对。记得一定要在Pack Installer里把对应的DFP包装上。
配置要点:
- 在
Project - Options for Target里,选择正确的芯片型号。 - Output标签页,勾选
Create HEX File,这样编译后会生成hex文件,方便烧录。 - Debug标签页,选择你的调试器。我一般用ST-Link,选
ST-Link Debugger,然后点Settings,把SWD模式选上。
1.2 STM32CubeIDE安装与配置
如果你觉得Keil界面太老,或者想用免费的工具,那STM32CubeIDE是个好选择。它是ST官方基于Eclipse做的IDE,免费、功能全。
安装步骤:
- 去ST官网下载STM32CubeIDE,注意选对操作系统版本。
- 安装过程很简单,解压即用。不过第一次启动会慢一些,因为它要初始化一堆东西。
- 启动后,它会自动检测你电脑上有没有安装STM32CubeMX。如果没有,它会提示你安装。建议装上,因为后面配置外设时钟、引脚分配,全靠它。
💡 小技巧: 我个人习惯用STM32CubeIDE来生成初始化代码,然后用Keil做调试。因为CubeIDE的代码生成器确实好用,但调试界面我还是更习惯Keil。你想想看,两个工具互补,效率更高。
配置要点:
- 新建项目时,选择
STM32 Project,然后选芯片型号。 - 在Pinout & Configuration界面,配置好时钟树。我一般把HCLK设为72MHz(对于F103系列)。
- 生成代码时,记得选
Generate peripheral initialization as a pair of .c/.h files,这样代码结构更清晰。
1.3 ESP-IDF环境搭建
咱们这个系统里,LoRa节点用的是STM32,但网关用的是ESP32。ESP32的开发环境,官方推荐的是ESP-IDF。
安装步骤:
- 打开终端,执行
git clone --recursive https://github.com/espressif/esp-idf.git。注意加上--recursive,否则子模块拉不下来。 - 进入esp-idf目录,运行
./install.sh(Linux/Mac)或install.bat(Windows)。这个过程会下载工具链和依赖库,时间比较长,耐心等。 - 安装完成后,运行
./export.sh设置环境变量。每次打开新终端都要执行一次,或者你可以把它加到.bashrc里。
⚠️ 注意: 我曾经在Windows上装ESP-IDF时,遇到Python版本冲突的问题。ESP-IDF要求Python 3.6以上,但系统自带的Python是3.5。解决办法是装一个独立的Python环境,或者用ESP-IDF自带的Python虚拟环境。
验证安装:
idf.py --version
# 如果输出版本号,说明安装成功
1.4 LoRa驱动库移植
LoRa模块,咱们用的是SX1278。驱动库我推荐用Semtech官方的,或者用开源的RadioLib。我个人更倾向于RadioLib,因为它封装得好,支持多种LoRa芯片。
移植步骤:
- 下载RadioLib源码,解压后把
src目录下的文件复制到你的项目目录里。 - 在Keil或CubeIDE里,把源文件添加到项目中。注意要包含头文件路径。
- 修改
RadioLib.h里的引脚定义。比如SPI的CS、DIO0、RST等引脚,要根据你的硬件连接来改。
核心代码示例:
// 初始化LoRa模块
#include <RadioLib.h>
// 定义引脚
#define LORA_CS PA4
#define LORA_DIO0 PB0
#define LORA_RST PB1
// 创建LoRa对象
SX1278 lora = new Module(LORA_CS, LORA_DIO0, LORA_RST);
void setup() {
Serial.begin(115200);
// 初始化LoRa
int state = lora.begin();
if (state == RADIOLIB_ERR_NONE) {
Serial.println("LoRa初始化成功!");
} else {
Serial.print("初始化失败,错误码:");
Serial.println(state);
}
}
💡 避坑指南: 我曾经移植LoRa驱动时,发现模块一直不工作。查了半天,原来是SPI的时钟极性没配对。SX1278要求SPI模式0(CPOL=0, CPHA=0),大家配置SPI时一定要注意。
1.5 串口调试工具使用
做嵌入式开发,串口调试是家常便饭。我推荐两个工具:SSCOM 和 MobaXterm。SSCOM轻量,MobaXterm功能全。
基本使用:
- 打开串口工具,选择正确的COM口。怎么知道是哪个?去设备管理器里看,或者拔插USB,看哪个端口消失又出现。
- 设置波特率。咱们一般用115200,8位数据位,1位停止位,无校验。
- 打开串口,就能看到单片机发来的数据了。
⚠️ 注意: 串口工具打开后,如果单片机正在发送数据,你可能会看到乱码。这通常是波特率不匹配造成的。检查一下你的代码里
Serial.begin() 的波特率,和串口工具设置的是否一致。
高级技巧:
- 用SSCOM的
定时发送功能,可以模拟上位机发送指令。 - MobaXterm支持日志记录,调试时可以把串口数据保存下来,方便分析。
- 如果数据量很大,建议用
二进制显示模式,避免ASCII编码问题。
1.6 环境验证
所有工具装好后,咱们做个简单的验证:写一个LED闪烁的程序,烧录到板子上,看能不能跑起来。
void setup() {
pinMode(PC13, OUTPUT); // 板载LED引脚
}
void loop() {
digitalWrite(PC13, LOW); // 点亮LED
delay(500);
digitalWrite(PC13, HIGH); // 熄灭LED
delay(500);
}
如果LED能正常闪烁,说明你的开发环境、烧录工具、串口调试,全部打通了。恭喜你,可以开始下一章的学习了。
总结一下:
- Keil和STM32CubeIDE,二选一即可。我建议新手用CubeIDE,老手用Keil。
- ESP-IDF环境搭建,注意Python版本和子模块拉取。
- LoRa驱动库移植,重点检查SPI配置和引脚定义。
- 串口调试工具,选一个顺手的,学会看数据。
好了,环境搭建就到这里。下一章咱们开始讲LoRa通信协议,到时候会用到今天装好的这些工具。有什么问题,欢迎在群里交流。