2. 开发环境搭建:ARM GCC工具链、OpenMV IDE、STM32CubeIDE的安装与配置,以及Hello World级别的LED闪烁验证

好,咱们正式开始动手了。

这一章,说白了就是“磨刀”。刀磨快了,后面砍柴才不费劲。我见过太多学员,代码写得挺溜,结果卡在环境配置上,一卡就是半天。嗯,咱们别走那个弯路。

我会带你装三个东西:ARM GCC工具链(编译器)、OpenMV IDE(写视觉算法的)、STM32CubeIDE(写底层控制的)。最后,咱们让一个LED灯闪起来——这就是嵌入式界的“Hello World”。

2.1 ARM GCC工具链:编译器才是硬道理

ARM GCC,全称是GNU Arm Embedded Toolchain。你想想看,我们在电脑上写的C代码,MCU是看不懂的。它只认识0和1。GCC就是那个翻译官,把人类语言翻译成机器语言。

2.1.1 下载与安装

我个人习惯去ARM官网直接下载。别去第三方网站,容易踩坑。我记得有一次,一个学员从某度下载了个“优化版”,结果编译出来的程序跑飞了,查了两天才发现是编译器版本不对。

  • Windows用户:下载.exe安装包,一路Next就行。注意勾选“Add path to environment variable”。
  • Linux/Mac用户:用包管理器安装。Ubuntu下就是sudo apt-get install gcc-arm-none-eabi
小提示:装完后,打开命令行,输入 arm-none-eabi-gcc --version。如果能看到版本号,说明装好了。看不到?别慌,八成是环境变量没配好。

2.1.2 验证一下

我一般会写个最简单的main.c,编译一下,看看能不能生成.hex文件。这一步虽然简单,但能帮你排除90%的环境问题。

// test.c
int main(void) {
    while(1);
    return 0;
}

编译命令:arm-none-eabi-gcc -c test.c -o test.o。没报错?恭喜,工具链通了。

2.2 OpenMV IDE:视觉算法的“画板”

OpenMV IDE,说白了就是给摄像头写算法的。它基于MicroPython,上手极快。我刚开始做嵌入式视觉时,用C语言写图像处理,一个边缘检测算法调了三天。后来用OpenMV,十分钟搞定原型验证。

2.2.1 安装步骤

  • 去OpenMV官网下载对应系统的版本。
  • 安装过程很简单,双击运行,一路默认。
  • 打开后,连接你的OpenMV Cam(或者用仿真模式)。
重点:OpenMV IDE自带了一个“帧缓冲区”窗口。你写代码时,可以实时看到摄像头画面。这个功能在调试时非常有用。我曾经用它来调试一个二维码识别算法,边调边看,效率翻倍。

2.2.2 写个简单的视觉脚本

咱们先不搞复杂的。写个脚本,让摄像头把画面变成灰度图,然后打印出中心像素的亮度值。

import sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    # 获取中心像素的灰度值
    center_pixel = img.get_pixel(img.width()//2, img.height()//2)
    print("Center pixel brightness:", center_pixel)
    print("FPS:", clock.fps())

点一下“运行”按钮,看看控制台是不是在刷数据?嗯,这就对了。

2.3 STM32CubeIDE:MCU的“大脑”

STM32CubeIDE,是ST官方出的集成开发环境。它集成了CubeMX(图形化配置)和IDE(写代码、编译、下载)。我个人觉得,它比Keil好用,关键是免费。

2.3.1 安装与配置

  • 去ST官网下载安装包。注意,需要注册一个账号,免费的。
  • 安装时,选择“STM32CubeIDE”组件。它会自动帮你装好GCC工具链。
  • 第一次启动,会让你选工作空间。我建议单独建一个文件夹,别跟其他项目混在一起。
避坑指南:我曾经遇到过一个问题——安装后无法编译,提示“找不到arm-none-eabi-gcc”。后来发现,是安装路径里有中文。STM32CubeIDE对中文路径支持不太好。所以,安装路径和项目路径,千万别用中文

2.3.2 创建第一个项目

咱们用CubeMX图形化配置,生成一个LED闪烁的工程。以STM32F103C8T6(蓝色药丸板)为例。

  1. 打开CubeIDE,点击“File” -> “New” -> “STM32 Project”。
  2. 在芯片选择器里,输入“STM32F103C8”,选中后点“Next”。
  3. 给项目起个名字,比如“LED_Blink”。点“Finish”。
  4. 在Pinout视图中,找到PC13(很多板子上的LED引脚),右键设置为“GPIO_Output”。
  5. 点击“Project” -> “Generate Code”。CubeMX会自动生成初始化代码。

2.4 Hello World级别的LED闪烁验证

好,现在咱们来写真正的“Hello World”。让LED以1秒为周期闪烁。

2.4.1 代码实现

在生成的main.c中,找到while(1)循环,加入以下代码:

/* Infinite loop */
while (1)
{
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
    HAL_Delay(500);  // 延时500ms
}

这段代码很简单:翻转LED状态,然后等500ms。这样,LED就会以1秒为周期亮灭。

2.4.2 编译与下载

  • 点击工具栏上的“锤子”图标(Build),编译工程。如果没报错,会生成.hex文件。
  • 用ST-Link或者USB转串口,连接你的开发板。
  • 点击“绿色虫子”图标(Debug),或者“绿色箭头”(Run)。程序会自动下载到MCU。
小技巧:如果下载失败,检查一下调试器配置。在“Run” -> “Debug Configurations”里,确保“Debug probe”选的是“ST-LINK”。我刚开始用的时候,经常忘了选,结果折腾半天。

2.4.3 验证结果

按下开发板上的复位键。如果LED开始以1秒间隔闪烁,恭喜你——环境搭建成功了!

你想想看,从零开始,到现在能让MCU跑起来,其实也就几步。很多初学者觉得嵌入式很难,其实只要环境搭好了,后面就是水到渠成的事。

2.5 本章小结

这一章,我们干了三件事:

  • 装了ARM GCC工具链,让电脑能编译ARM代码。
  • 装了OpenMV IDE,为视觉算法准备了“画板”。
  • 装了STM32CubeIDE,并用它让LED闪了起来。

嗯,到这里,你的开发环境已经齐活了。下一章,咱们就要开始真正的视觉算法部署了——把OpenMV上跑的图像处理代码,移植到STM32上。听起来有点刺激?别急,我会一步步带你走。

课后作业:试着修改延时时间,让LED以不同的频率闪烁。比如,200ms亮,800ms灭。看看你能不能做到?