ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

嵌入式开发分享(一):从环境搭建到点亮 LED

嵌入式开发分享(一):从环境搭建到点亮 LED

嵌入式开发,简单来说就是在单片机上写程序,让硬件按照我们的意图工作。

小到智能手表,大到汽车电子、工业控制,嵌入式无处不在。

这个系列我会以 STM32F103 为例,从零开始分享嵌入式软件开发的实战经验。

内容覆盖 GPIO、中断、定时器、串口、工程架构等核心知识点。

一、开发环境搭建

工欲善其事,必先利其器。

嵌入式开发的工具链主要包括以下几种。

第一种是 Keil MDK-ARM。

它用于编译、下载和调试,推荐使用 5.38 及以上版本。

第二种是 STM32CubeMX。

它用于图形化配置和生成初始化代码,推荐 6.x 版本。

第三种是 ST-Link Utility。

它用于固件下载与擦除。

第四种是串口助手。

它用于串口调试,可以任意选择。

  1. Keil MDK 安装

Keil MDK 是 ARM 官方的集成开发环境,支持 Cortex-M 全系列内核。

安装时需要注意以下几点。

第一,安装路径不要有中文和空格。

第二,安装完成后需要激活,可以申请个人免费版。

第三,需要安装 STM32F1 的器件支持包。

  1. STM32CubeMX 安装

CubeMX 是 ST 官方的图形化配置工具。

它可以可视化配置时钟树和外设引脚,然后自动生成初始化代码。

这样可以大幅减少手写寄存器配置的工作量。

  1. 驱动安装

使用 ST-Link 下载器需要安装对应驱动。

Windows 10 和 Windows 11 一般会自动识别。

二、STM32 工程结构

一个标准的 Keil 工程通常包含以下几个目录。

第一个目录是 User。

它存放用户代码,比如 main.c。

第二个目录是 System。

它存放系统文件,包括启动文件和系统时钟配置。

第三个目录是 Libraries。

它存放标准外设库或者 HAL 库。

其中 CMSIS 是 Cortex 微控制器软件接口标准。

STM32F10x 是外设驱动源码。

第四个目录是 Output。

它存放编译输出的文件,比如 hex 和 bin。

第五个目录是 Listings。

它存放编译列表文件。

工程中的核心文件有以下几个。

第一个是 startup_stm32f10x_md.s。

它是启动文件,定义中断向量表,初始化栈,然后调用 main 函数。

第二个是 stm32f10x.h。

它是寄存器定义头文件,所有外设寄存器映射都在这里。

第三个是 system_stm32f10x.c。

它负责系统时钟初始化,配置 PLL 倍频到 72MHz。

第四个是 main.c。

它是用户主程序的入口。

三、第一个程序:点亮 LED

点亮 LED 是嵌入式的 Hello World。

假设 LED 接在 PC13 引脚,低电平点亮。

  1. 开时钟

STM32 所有外设默认时钟关闭,使用前必须开启。

GPIOC 挂在 APB2 总线上,所以需要开启 APB2 的 GPIOC 时钟。

  1. 配置 GPIO 模式

LED 需要输出高低电平,所以配置为推挽输出模式。

推挽输出可以输出强高低电平,驱动能力强。

  1. 控制引脚电平

拉低引脚电平,LED 亮。

拉高引脚电平,LED 灭。

在 while 循环中交替拉高拉低,就能实现 LED 闪烁。

中间加入延时函数,控制闪烁速度。

四、编译与下载

  1. 编译

点击工具栏的 Build 按钮,快捷键是 F7。

编译成功后,Output 目录会生成 hex 文件。

编译输出会显示程序大小,包括以下几个字段。

Code 表示代码占用的 Flash。

RO-data 表示只读数据,也就是常量。

RW-data 表示已初始化的全局变量。

ZI-data 表示未初始化的全局变量,占用 RAM。

  1. 下载

使用 ST-Link 连接开发板,在 Keil 中按以下步骤操作。

第一步,点击魔术棒,选择 Debug,选择 ST-Link Debugger。

第二步,点击 Settings,选择 Flash Download,勾选 Reset and Run。

第三步,点击 Download,快捷键是 F8,下载程序。

下载成功后 LED 会开始闪烁,说明你的第一个嵌入式程序跑起来了。

五、调试技巧

Keil 提供了强大的在线调试功能,常用快捷键如下。

F5 是开始调试。

F10 是单步执行,不进入函数。

F11 是单步执行,会进入函数。

Ctrl 加 F5 是停止调试。

调试时可以在 Watch 窗口查看变量值。

在 System Viewer 中可以查看外设寄存器的实时状态。

这对排查问题非常有帮助。

六、常见问题

问题一:编译报错找不到 stm32f10x.h

原因是头文件路径未添加。

解决方法是在魔术棒的 C/C++ 选项中,找到 Include Paths,添加 Libraries 头文件路径。

问题二:下载失败提示 No ST-Link detected

原因是驱动未安装或者 USB 线有问题。

解决方法是重新安装 ST-Link 驱动,或者换一根数据线。

需要注意有些线只能充电不能传数据。

问题三:程序下载后没有运行

原因可能是没有勾选 Reset and Run,或者 BOOT 引脚配置错误。

解决方法是在 Flash Download 中勾选 Reset and Run,并确认 BOOT0 接 GND。

小结

本篇我们完成了嵌入式开发的环境搭建,跑通了第一个 LED 闪烁程序。

接下来的系列文章会逐步深入 GPIO 的 8 种模式、中断系统、定时器等核心外设。

如果你觉得有帮助,欢迎点赞收藏,我们下篇见。

返回列表