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

零基础快速上手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 的启动方式的:

BOOT0BOOT1启动模式说明
0X用户闪存存储器用户闪存存储器,也就是 flash 启动
10系统存储器系统存储器,用于串口下载
11SRAM启动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 的开发,在成为嵌入式工程师的道路上又前进了一步。

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


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

file

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

推荐阅读:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双H桥直流马达步进电机驱动芯片SS8833E

由工采网代理的率能SS8833E是一款适用于有刷直流或双极步进电机的集成电机驱动芯片;采用eTSSOP16封装;该器件集成了两个PNMOS H桥和电流调节电路;电机输出电流可以由外部脉宽调制器(PWM)或内部PWM电流控制器控制。 工…

【Java 进阶篇】JQuery DOM操作:通用属性操作的绝妙魔法

在前端的舞台上,JQuery犹如一位魔法师,为我们展现了操纵HTML元素的奇妙技巧。而在这个技巧的精妙组成中,通用属性操作是一门绝妙的魔法。在本篇博客中,我们将深入研究JQuery DOM操作中的通用属性操作,揭示这段魔法的神…

11.13 牛客刷题8/10

11.13 信号完整性 指针地址 的加减,注意 最后转为16进制

leetCode 25.K 个一组翻转链表

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于 或 等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值&a…

【PIE-Engine 数据资源】全球250米LAI产品

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球250米LAI产品时间范围2015年空间范围全球数据来源北京师范大学肖志强教授团队代码片段var images pie.ImageCollection(“BNU/LAI/GLOBAL-250”) 二、描述 全球 250 米叶面指数产品由北京师范…

本地PHP搭建简单Imagewheel私人云图床,在外远程访问——“cpolar内网穿透”

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

产品化的GPT,能否为“百模大战”照亮未来?

这两天,AI圈都处在一种莫名的震撼感当中。 北京时间 11月7日,OpenAI 举办了首次DevDay开发者日活动。活动现场发布了非常多内容,其中有一些按部就班的,比如技术上更新了最新版本的GPT-4 Turbo。也有一些让从业者目瞪口呆&#xff…

高速高精运动控制,富唯智能AI边缘控制器助力自动化行业变革

随着工业大数据时代的到来,传统控制与决策方式无法满足现代数字化工厂对工业大数据分析与决策的需求,AI边缘控制器赋能现代化智慧工厂,实现工业智造与行业变革。 富唯智能AI边缘控制器,基于x86架构的IPC形态产品,通过…

python爬虫hook定位技巧、反调试技巧、常用辅助工具

一、浏览器调试面板介绍 二、hook定位、反调试 Hook 是一种钩子技术,在系统没有调用函数之前,钩子程序就先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,也可以强制结束消息的传递。简单…

视觉大模型DINOv2:自我监督学习的新领域

1 DINOv2 1.1 DINOv2特点 前段时间,Meta AI 高调发布了 Segment Anything(SAM),SAM 以交互式方式快速生成 Mask,并可以对从未训练过的图片进行精准分割,可以根据文字提示或使用者点击进而圈出图像中的特定…

【Git】第四篇:基本操作(理解工作区、暂存区、版本库)

Git 工作区、暂存区和版本库 工作区:就是我们创建的本地仓库所在的目录暂存区: stage或index,一般放在.git(可隐藏文件)目录下的index文件(.git/index)中,所以我们把暂存区有时候也叫做索引(in…

JVM:如果是你,你如何解决跨代引用的问题?(记忆集和卡集)

这部分内容主要是为了稍后介绍各款垃圾收集器时做前置知识铺垫,如果对这部分内容感到枯燥或者疑惑,可以先放下看,等后续遇到要使用它们的实际场景、实际问题时再结合问题,再回来阅读和理解。 记忆集和卡集 前面在分代收集理论那…

【Java 进阶篇】JQuery DOM操作:舞动网页的属性魔法

在前端的舞台上,属性操作是我们与HTML元素进行互动的关键步骤之一。而JQuery,这位前端开发的巫师,通过简洁而强大的语法,为我们提供了便捷的属性操作工具。在这篇博客中,我们将深入研究JQuery DOM操作中的属性操作&…

FPGA与STM32_FSMC总线通信实验

FPGA与STM32_FSMC总线通信实验 内部存储器IP核的参数设置创建IP核FPGA代码STM32标准库的程序 STM32F407 上自带 FSMC 控制器,通过 FSMC 总线的地址复用模式实现STM32 与 FPGA 之间的通信,FPGA 内部建立 RAM 块,FPGA 桥接 STM32 和 RAM 块&…

【算法 | 模拟No.5】leetcode 74. 搜索二维矩阵

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

抢抓泛娱乐社交出海新风口!Flat Ads深圳沙龙活动引爆海外市场

随着全球化进程的加速,中国的应用类APP不断走向国际市场。作为产品和服务的提供者,中国开发者围绕社交泛娱乐创新,开启直播出海、短视频出海、游戏社交出海、1V1 视频出海、音频社交出海等出海热潮。“社交、泛娱乐”融合成为行业主流发展趋势…

Go的优雅退出

Go优雅退出/停机以前主要通过signal来实现,当然现在也是通过signal来实现,只是从go 1.16开始,新增了更加友好的API: func NotifyContext(parent context.Context, signals ...os.Signal) (ctx context.Context, stop context.CancelFunc) 该…

DevChat:开发者专属的基于IDE插件化编程协助工具

DevChat:开发者专属的基于IDE插件化编程协助工具 一、DevChat 的介绍1.1 DevChat 简介1.2 DevChat 优势 二、DevChat 在 VSCode 上的使用2.1 安装 DevChat2.2 注册 DevChat2.3 使用 DevChat 三、DevChat 的实战四、总结 一、DevChat 的介绍 在AI浪潮的席卷下&#x…

Linux每日智囊

每日分享三个Linux命令,悄悄培养读者的Linux技能。 ls 作用 显示目录信息 语法 ls [选项] 文件 参数: -a:显示所有文件,包含以 . 开头的隐藏文件以及特殊目录-A:显示所有文件,包含以 . 开头的隐藏文件,但不显示特殊文件 . 和 …-l:使用长格式显示当前目录下文件的详…

STM32——NVIC中断优先级管理分析

文章目录 前言一、中断如何响应?NVIC如何分配优先级?二、NVIC中断优先级管理详解三、问题汇总 前言 个人认为本篇文章是我作总结的最好的一篇,用自己的话总结出来清晰易懂,给小白看也能一眼明了,这就是写博客的意义吧…