第1章:开发环境搭建

各位同学,咱们正式开始做项目之前,第一件事就是把家伙事儿备齐。开发环境搭建这事儿,说难不难,说简单吧,我第一次搞的时候也踩过不少坑。今天我就带着大家,把Keil、STM32CubeIDE、ESP-IDF、LoRa驱动库、串口调试工具,一个一个搞定。

1.1 Keil MDK安装与配置

Keil MDK,说白了就是ARM芯片的编译器加调试器。咱们做LoRa停车位检测,主控芯片用的是STM32系列,所以Keil是绕不开的。

安装步骤:

  1. 去Keil官网下载MDK-Arm版本,目前最新的是V5.38。我个人习惯用V5.36,稳定。
  2. 双击安装包,一路Next。注意安装路径不要有中文,否则编译会报一些莫名其妙的错。
  3. 安装完成后,打开Keil,点击 Pack Installer,搜索你的芯片型号。比如STM32F103C8T6,勾上对应的Device Family Pack。
  4. 激活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,免费、功能全。

安装步骤:

  1. 去ST官网下载STM32CubeIDE,注意选对操作系统版本。
  2. 安装过程很简单,解压即用。不过第一次启动会慢一些,因为它要初始化一堆东西。
  3. 启动后,它会自动检测你电脑上有没有安装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。

安装步骤:

  1. 打开终端,执行 git clone --recursive https://github.com/espressif/esp-idf.git。注意加上 --recursive,否则子模块拉不下来。
  2. 进入esp-idf目录,运行 ./install.sh(Linux/Mac)或 install.bat(Windows)。这个过程会下载工具链和依赖库,时间比较长,耐心等。
  3. 安装完成后,运行 ./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芯片。

移植步骤:

  1. 下载RadioLib源码,解压后把 src 目录下的文件复制到你的项目目录里。
  2. 在Keil或CubeIDE里,把源文件添加到项目中。注意要包含头文件路径。
  3. 修改 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 串口调试工具使用

做嵌入式开发,串口调试是家常便饭。我推荐两个工具:SSCOMMobaXterm。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通信协议,到时候会用到今天装好的这些工具。有什么问题,欢迎在群里交流。