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(或者用仿真模式)。
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工具链。
- 第一次启动,会让你选工作空间。我建议单独建一个文件夹,别跟其他项目混在一起。
2.3.2 创建第一个项目
咱们用CubeMX图形化配置,生成一个LED闪烁的工程。以STM32F103C8T6(蓝色药丸板)为例。
- 打开CubeIDE,点击“File” -> “New” -> “STM32 Project”。
- 在芯片选择器里,输入“STM32F103C8”,选中后点“Next”。
- 给项目起个名字,比如“LED_Blink”。点“Finish”。
- 在Pinout视图中,找到PC13(很多板子上的LED引脚),右键设置为“GPIO_Output”。
- 点击“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。
2.4.3 验证结果
按下开发板上的复位键。如果LED开始以1秒间隔闪烁,恭喜你——环境搭建成功了!
你想想看,从零开始,到现在能让MCU跑起来,其实也就几步。很多初学者觉得嵌入式很难,其实只要环境搭好了,后面就是水到渠成的事。
2.5 本章小结
这一章,我们干了三件事:
- 装了ARM GCC工具链,让电脑能编译ARM代码。
- 装了OpenMV IDE,为视觉算法准备了“画板”。
- 装了STM32CubeIDE,并用它让LED闪了起来。
嗯,到这里,你的开发环境已经齐活了。下一章,咱们就要开始真正的视觉算法部署了——把OpenMV上跑的图像处理代码,移植到STM32上。听起来有点刺激?别急,我会一步步带你走。