零基础快速上手STM32开发(手把手保姆级教程)

1. 前言

作为一名嵌入式工程师,STM32 是必须要学习的一款单片机,同时这款单片机资料足够多,而且比较简单,非常适合初学者入门。

STM32 是一款由 STMicroelectronics 公司开发的 32 位微控制器,由于其强大的处理能力和广泛的应用领域,如嵌入式系统、物联网设备、机器人等,而受到了广泛的欢迎。

但对于零基础的初学者来说,STM32 既没屏幕也没键盘,除了上电以外根本就不知道如何开发它。没关系,不用担心,本文将为你提供一个完整的、详细的手把手教程,帮助你从零开始搭建 STM32 开发环境。

2. 前置准备

2.1 电脑配置要求

  • Windows 电脑

很多人以为作为程序员,电脑就一定要配置好一点,于是就花了 2 万块钱买了台游戏本。。。

其实大可不必,游戏本它最贵的地方在于显卡,而对于嵌入式程序员来讲(其实对于除了人工智能及大数据程序员外都一样),电脑比较吃的性能在于 CPU 和 内存,显卡其实用不了多少(当然如果你想玩游戏就另说)。

所以大家应该把钱用在刀刃上,先把 CPU 和内存配置好就可以了。当然,在你的经济允许范围之内,你的电脑配置越高越好,毕竟工欲善其事,必先利其器。

电脑最低配置要求:

1. CPU :i5 及以上

2. 内存:16G 及以上

现在市面上能买得到的电脑,绝大多数都可以满足这两个条件。

那么要买笔记本还是台式机呢?如果你有移动办公需求,比如学生,或者需要把电脑带回家的上班族,那肯定要选择笔记本了。而如果你基本上就在一个地方做开发,那么其实我更推荐台式机,因为在相同价格里,台式机可以做到更高很多的性能。

我个人现在主要用的还是台式机,一点都不卡,嘎嘎爽!

顺便把我的台式机配置贴出来给大家参考:

由于我有直播的需求,比较吃显卡,所以搞了个稍微好点的显卡,如果你们没有特殊需求,集成显卡都可以的。

  • Mac 电脑

很多人问我能不能用 Mac 电脑开发嵌入式,根据我的实际测试,Mac 电脑确实是可以进行嵌入式开发(需要配合虚拟机),但是说实话,体验比 Windows 差太多了。

我所使用的 Mac 电脑是 2023 年 3 月发行的 M2 电脑,16G 丐版。根据同行的反馈,Intel 版本的 Mac 电脑也可以进行嵌入式开发。

但即便如此,我还是强烈建议大家入手一台 Windows 电脑,特别是对于初学者,单单是环境的搭建,就已经足以让你掉一大把的头发了,要是再换个平台给你增加难度,那么。。你很可能还没开始就放弃了……

如果大家对 Mac 电脑的环境配置有需要的,可以联系我,我到时再出个教程。

2.2 安装包及驱动准备

STM32 开发所需要的安装包及驱动在网络上都可以下载到,但比较零散,我帮你们都整理好了,这些工具软件也是我自己正在用的。

在下文中,我将详细告诉大家这几个软件是做什么用的,以及它们的安装方法。

由于平台的限制,请到原文获取以下安装包及驱动:

【零基础快速上手STM32开发(手把手保姆级教程)】

  • 安装包准备

1. MDK5安装包

2. STM32CubeMX安装包

3. 芯片固件包

4. 串口烧录工具

  • 驱动准备

1. CH340驱动

2. ST-Link驱动

  • 示例代码

STM32F103C8T6模板工程

2.3 硬件准备

  • STM32 核心板

作为嵌入式开发人员,肯定要买各种各样的板子,就算你现在还不是嵌入式工程师,你应该也有所耳闻。

如果你经济有限,那么我建议你买个核心板就可以了。

所谓的核心板,就是一颗最核心的 STM32 芯片,再加上复位电路、电源、晶振、调试接口,以及少量按键及 LED 灯组成,硬件资源有限。

比较常见的核心板如下图所示,非常便宜,某宝上 10 元左右(关键词:STM32 核心板),一杯奶茶的钱不到。

核心板最大的优点是便宜简单,缺点就是需要根据需求自己搭一些电路,对你的动手能力要求比较高。

上面所推荐的这块核心板,主控芯片是 STM32103C8T6 ,64K flash,20K RAM,4 个定时器,3 个串口,网络上资料好几吨,非常适合初学者入门,强烈推荐。

  • STM32 开发板

开发板与核心板最大的区别就是,开发板板载了更多的硬件资源,比如更多 LED 灯,更多按键,也有一些传感器,以及一些扩展 flash 等等资源。不同的开发板搭载的硬件资源不一样,这就是为什么市面上有这么多开发板的原因。

现在做 STM32 开发板比较有名的是正点原子和野火,个人更推荐正点原子,因为我跟原子哥是好朋友 (_),而且如果你们买正点原子的板子,只要跟客服说是良许的粉丝,他们就会给你打折!

开发板最大的优点就是资源丰富,减少你自己接线出错的概率,比较适合初学者。但缺点也很明显,价格肯定比核心板更贵。

如果你想买开发板,强烈推荐正点原子精英开发板,板载资源足够丰富,价格也不贵(200 元出头),性价比超高!而且他们在 B 站有免费的配套视频教程,教程质量也很高,非常适合初学者。

PS:核心板和开发板,二选一即可。当然,土豪就当我没说话。

  • USB 转 TTL

这种设备主要作用是用来调试或下载程序。价格也很便宜,普遍 5~8 元。常见的有以下两种:

个人更推荐下面一款,因为它可以切换 VCC 输出电压,在对一些传感器进行独立测试的时候会比较方便。不过反正也不贵,多买几个想怎么用就怎么用。

  • ST-Link

ST-Link 是一种用于 STM32 微控制器的调试和编程工具,它可以通过 SWD 或 JTAG 接口与开发板进行通信。一般也很便宜,七八元左右。

小小总结一下:

刚入门 STM32 开发,你只需要准备好三个东西就可以了:1. 核心板;2. USB 转 TTL ;3. ST-Link。这三样加起来成本也就 30 元左右,一杯奶茶钱就可以玩转 STM32,是不是很爽呢?

2.4 前置阅读

新手小白如果连 MDK 的使用都不熟悉,那么可以通过下文先熟悉一下 MDK 的使用:

【一文教你使用MDK开发工具】

文中所使用的芯片是 STM32F103C8T6 ,配套了一个工程模板,如果你需要自己搭建一个工程模板,可以参考下文:

【手把手带你创建HAL版本MDK工程模板】

如果你连代码都不知道怎么烧录到 STM32 的,可以参考下文,提供了 5 种代码烧录方式:

【STM32下载程序的五种方法】

3. 安装MDK5

MDK5 是由 Keil 公司发布的一款嵌入式软件开发环境,我们平时在进行 STM32 开发的时候,基本上都是在这个软件上进行。

MDK5 可以在它们的官网上下载,网址如下:

https://www.keil.com/demo/eval/arm.htm#/DOWNLOAD

当前最新版本是 MDK538A ,但新版并不意味着最好,可能会有一些奇奇怪怪的问题,也可能不稳定。

推荐大家使用 MDK534,也是我目前所使用的版本,至今未出过什么问题。安装包已经在 2.2 安装包及驱动准备 中为大家提供了,接下来我就手把手教大家在你们的电脑上安装 MDK5 。

双击我给大家提供的安装包后,会出现以下界面,大家跟着我的图片操作即可:

到此为止,MDK5 就安装完成了。

但是,我给你们提供的安装包是官网下载的正版版本,试用几天后就要收费了。破解的方法网络上有一大堆,这里我就不讲了,我也怕律师函。

接下来就要安装固件包了。什么是固件包呢?由于 ST 公司生产了非常多的芯片,每颗芯片所需要的支持文件都不一样,这些文件组合起来就是固件包。

但有这么多芯片,他们不可能把所有的固件包都集成在 MDK5 里,否则 MDK5 的安装包将变得超级无敌巨大,很占空间也没必要。比较好的解决方案就是你需要用到什么芯片,就安装对应的固件包就可以了。

固件包也是在官网上可以下载到,网址如下:

https://www.keil.arm.com/packs/

由于我们使用的板子是 STM32F103C8T6 ,属于 F1 系列,所以在搜索框里搜索 STM32F1 即可。如果大家使用的是其它系列芯片,那就搜索对应系列的关键词,不要傻乎乎都按下图搜索哦~

同样的,由于服务器在国外,下载速度巨慢。大家用我提供的文件就可以了,同样也是官网上下载的,原汁原味。链接在 2.2 安装包及驱动准备 可以找到。

安装的方法很简单,只需要双击安装包即可,然后它就会自动识别固件包的目录,点击 Next ,然后等进度条走到底就 OK 了。

4. 安装STM32CubeMX

STM32CubeMX 能帮助开发者通过直观的图形界面快速完成 STM32 微控制器的硬件配置,外设初始化以及中间件设置等工作。通过STM32CubeMX,开发者可以大幅提高开发效率,降低开发难度,尤其是对于刚接触STM32的新手。

但是,STM32CubeMX 虽然方便,但不建议大家过度依赖它,否则会影响你的个人能力发展。只有你在刚入门 STM32 ,或者需要快速验证一些代码,才建议大家使用这个软件。

STM32CubeMX 在它的官网可以下载,网址如下:

https://www.st.com/content/st_com/zh/stm32cubemx.html

还是一样,由于服务器在国外,下载速度很慢,大家使用我在 2.2 安装包及驱动准备 给大家准备好的安装包即可,就是从官网下载的,我只是个搬运工而已。

接下来的安装步骤,请依次看下面的图片:

OK,搞定!

5. 驱动安装

所谓的驱动,就是让电脑认识插进来的 USB 设备,否则就算你把设备插好了,依然无法正常工作。大家应该有过被黄色叹号支配的恐惧吧。

以下驱动,我都已经在 2.2 安装包及驱动准备 里给大家准备好了。

5.1 CH340驱动安装

5.2 ST-Link驱动安装

6. 程序编译

如果你们使用的是我上面推荐的 STM32F103C8T6 核心板,那么请下载 2.2 安装包及驱动准备 我提供的模板工程,然后打开这个工程。

程序打开后,在上图中左上角箭头处,有三个按钮,我们所做的编译工作都是使用这三个按钮。那这三个按钮有什么作用呢?

  • 第一个按钮: Translate 就是翻译当下修改过的文件,说明白点就是检查下有没有语法错误,并不会去链接库文件,也不会生成可执行文件。

  • 第二个按钮: Build 就是编译当下修改过的文件,它包含了语法检查,链接动态库文件,生成可执行文件。

  • 第三个按钮: Rebuild 重新编译整个工程,跟 Build 这个按钮实现的功能是一样的,但有所不同的是它编译的是整个工程的所有文件,耗时巨大。

在实际工作中,我们最经常使用的就是第二个按钮,另外两个用得不多,尤其是第一个。

7. 程序下载

7.1 硬件接线

核心板上边的电源线,随便找一根 microUSB 线来接就行,也就是之前手机充电线,扁头的那种,它就是用来供电的,没有传输数据。

而下边的下载引脚,主要是三根起作用:SWDIO、SWDCLK、GND。大家认真对照核心板与 ST-Link ,别接错了哈。特别是 ST-Link ,接的是缺口对面那一排引脚,而不是靠近缺口的那一排引脚。为了让你们看更清楚,我又拍了一张细节图(够保姆吧)。

在下面这张图里,棕色是 GND ,红色是 SWDIO ,黄色是 SWDCLK,大家可以对照着接线。

7.2 ST-Link下载

在下载之前,请先按下面的步骤做好配置。

到此为止,针对 MDK 的配置已经搞定了,现在就可以进行下载了。

在下载之前,请做好四件事:

  1. 就是刚刚前面的配置,一定要配置好;
  2. 设备的接线,只要有一根线没接对,就无法完成下载;
  3. 编译好程序;
  4. 板子一定要上电。

程序下载成功之后,板子自动运行新代码,会看到 LED 灯间隔 500 毫秒亮灭交替闪烁。

7.3 串口下载

串口下载工具有很多,这里推荐 FlyMcu 。

FlyMcu 是一款好用的 STM32 烧录程序软件,对于专业的单片机开发者来说应该非常适用,软件可以广泛地应用于电路编程和应用编程领域,支持进行编程、校验、读器件信息。

这款工具是国产的,大家如果需要最新版的,可以去它们的官网下载:

http://www.mcuisp.com/

当然,用我提供的也行,反正也是他们官网下载的。

在下载程序之前,请先接好线。接线图如下图所示:

电源接线没什么好说的,主要是串口这边,一定要注意交叉接线,也就是 CH340 转 TLL 工具的 TX 要接板子的 RX ,CH340 转 TLL 工具的 RX 要接板子的 TX ,千万不要接错,否则就不能烧进去!

开发板上的 PA9 是 TX ,PA10 是 RX ,请按上一段提到的交叉接线接好线,再打开 FlyMcu 。

接下来,将板子上的 BOOT0 跳线帽接到 1 ,BOOT1 路线帽维持在 0 ,如下图所示:

为什么要这么操作呢?

这两个跳线帽是用来调整 BOOT0 和 BOOT1 的状态。跳线帽接到 1 就是高电平,接到 0 就是低电平。

BOOT0 和 BOOT1 是用于设置 STM32 的启动方式的:

BOOT0 BOOT1 启动模式 说明
0 X 用户闪存存储器 用户闪存存储器,也就是 flash 启动
1 0 系统存储器 系统存储器,用于串口下载
1 1 SRAM启动 SRAM启动,用于在SRAM中调试代码

这里是用 USB 下载, 也就是串口下载,所以选择表中的第二个方式也就是 BOOT0 选择 1, BOOT1 选择 0 。

然后你就可以点击软件上的 开始编程 按钮,但你会发现,右边一直处于连接状态。这个时候,只有你按一下板子上的 reset 按键(板子上唯一的一个按键),它就开始往下走了。

下载后记得把 BOOT0 的跳线冒跳回 0 端,BOOT0 和 BOOT1 都为 0 ,这样程序就从 flash 区启动,再按一下 reset 按键板子就开始运行烧录进去的代码了。

8. 总结

在本文中,我给大家介绍了嵌入式工程师必玩的 STM32 单片机快速上手指南,从此你们就打开了嵌入式的大门了。

本文给大家分享了安装包及驱动,手把手教大家安装 MDK5、STM32CubeMX,以及 CH340/ST-Link 的驱动。并且分享了如何使用 MDK5 编译、下载程序(ST-Link 下载及串口下载)。

通过本文的分享,相信大家能够顺利上手 STM32 的开发,在成为嵌入式工程师的道路上又前进了一步。

本文比较基础,老司机请忽略,但对新手朋友肯定很有帮助。


学习编程,千万不要急于求成,一定要多读一些经典书籍,多看源码,多下苦功夫去死磕代码,这样技术才能长进。给大家分享一些程序员必读经典书籍,一定要多读几遍:

免费送给大家,只求大家金指给我点个赞!

程序员必读经典书单(高清PDF版)

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

欢迎关注我的博客:良许Linux教程网,满满都是干货!

零基础快速上手STM32开发(手把手保姆级教程)的更多相关文章

  1. 序言 - PHP零基础快速入门

    我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...

  2. [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】

    [课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...

  3. 零基础快速入门web学习路线(含视频教程)

    下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...

  4. 零基础快速入门SpringBoot2.0 (一)

    零基础快速入门SpringBoot2.0 (一) 一.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Spr ...

  5. [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]

    [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...

  6. [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]

    [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的 ...

  7. [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我 ...

  8. [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现 ...

  9. [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)]

    [易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点 ...

  10. 前端开发工具包 WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

    ​ 前端开发工具包WijmoJS在2019年的第一个主要版本2019V1已经发布,本次发布包括了更加易用的在线Demo系统.各控件新增功能.NPM 包的改动,以及全新的浏览器API组件. WijmoJ ...

随机推荐

  1. FreeBSD 内核模块和硬盘相关

    查看已加载的内核模块 使用命令:kldstat 加载驱动: kldload xx 查看识别到的硬盘 使用命令:dmesg | grep sector freeBSD 查看硬件信息 使用命令:dmesg ...

  2. chrome pre 自动换行

    问题引出 当我想要使用chrome的打印功能生成一份关于md的pdf版本的时候发现有的代码块没有自动换行,生成的PDF没有自动换行,导致部分信息无法阅读 处理方式 把有自动换行的部分处理一下,在md文 ...

  3. BugKu:文件包含+php伪协议

    这道题一进去发现一个超连接点击后发现跳转到了如下页面url如下/index.php?file=show.php,觉得这道题应该是一个php伪协议的应用 1 php://filter php://fil ...

  4. DC-SDK 开发文档

    https://resource.dvgis.cn/dc-docs/v2.x/zh/introduction/#%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE

  5. 【教程】AWD中如何通过Python批量快速管理服务器?

    前言 很多同学都知道,我们常见的CTF赛事除了解题赛之外,还有一种赛制叫AWD赛制.在这种赛制下,我们战队会拿到一个或多个服务器.服务器的连接方式通常是SSH链接,并且可能一个战队可能会同时有多个服务 ...

  6. Cilium系列-16-CiliumNetworkPolicy 实战演练

    系列文章 Cilium 系列文章 前言 今天我们进入 Cilium 安全相关主题, 基于 Cilium 官方的<星球大战> Demo 做详细的 CiliumNetworkPolicy 实战 ...

  7. .NET 8 发布的最后一个预览版Preview 7, 下个月发布RC

    微软在2023年8月9日 发布了.NET 8 Preview 7[1],这是它在11月14日 RTM 之前进入发布候选阶段之前的最后预览版. 该预览版也于也与 VS 2022 v17.7 版本一起发布 ...

  8. PXE操作过程 kickstart 无人值守安装

    PXE操作过程 分配给同一局域网内新加机器的地址(配置文件) dhcp 分配地址 指明tftp 服务器的地址 tftp服务端开启 udp 配置 默认关闭 安装syslinux 取得 pxelinux. ...

  9. SpringBoot3集成Redis

    目录 一.简介 二.工程搭建 1.工程结构 2.依赖管理 3.Redis配置 三.Redis用法 1.环境搭建 2.数据类型 3.加锁机制 四.Mybatis缓存 1.基础配置 2.自定义实现 五.参 ...

  10. ArcMap时间滑块绘制遥感影像的动态变化过程

      本文介绍基于ArcMap软件,利用时间滑块功能,对大量多时相栅格遥感影像数据进行动态显示,并生成视频或动图的方法.   首先,我们需要在ArcMap软件中新建一个镶嵌数据集,并将全部的多时像遥感影 ...