干货!学习STM32的一些经验分享

2023-05-16

前言

前两天在群里看到群友们在讨论学习STM32的话题,并且今天也有一位机械专业的准研究生读者也问了STM32的入门问题。

正好我也有一点点经验,所以试着分享一下这个话题。我也不是什么大神,只是一名普通的工程师,以下分享仅仅是自己的一点经验及看法,仅供参考,希望能对一些初学的朋友有所帮助。老鸟略过~~

找资料

在知乎,我也有看到类似问题:学STM32要买什么书籍、看什么书籍?

STM32编程作为一项实操性很强的技能,所以要多实操。初学的话,我觉得书籍就暂时先不买吧,先考虑入手一块STM32开发板,然后跟着开发板的教程走。

几年前,做STM32的教程有很多家:

现在市面上还比较火的基本就只剩前4家了,从这4家中选择一家买开发板。正好这4家的教程我都基本上都有看过一遍,下面简单介绍一下它们各自的特点:

1、正点原子

正点原子的教程特点的关键词:手把手

教程对初学者比较友好。51转过来的,觉得自己基础不太好的朋友可以选这个教程,我以前入门也是看了原子哥的视频入的门。

有个缺点就是:代码编码风格不是太好。我现在比较少看他们的代码,因为看起来不舒服~

2、野火

野火教程特点的关键词:零死角

野火的教程非常好,适合反反复复地读,STM32的教程我看得最多的就是野火的了。我觉得无论现在你在用什么教程,最终都有必要再看一下野火的教程。

野火的教程很多知识点剖析得很透彻,真所谓零死角。火哥书里有这样一句话:基础不牢,地动山摇。与君共勉~

3、安富莱

安富莱教程特点的关键词:授人以渔

安富莱的教程是我工作之后看得比较多的,教程在很详细剖析知识点的同时也在教我们学习的方法。

其实我第一次接触STM32用的是安富莱的教程,但那个时候看安富莱的代码令我很难受,当时不明白为什么那些变量命名得那么花里胡哨,所以也就没用它们的教程。

后来有了一点基础之后才发现我错了,这是多么规范的代码啊!安富莱教程是精品中的精品,适合进阶。

安富莱的教程我觉得跟野火的教程基本不分上下,让我做选择我也选不出。小孩子才做选择,我们成年人可以全都学~

但就代码风格及框架而言,安富莱的代码风格是最接近实际项目的,我第一份工作的公司的代码风格基本上就是沿用安富莱的代码风格,看得很舒服、很有条理。

看这工程有没有觉得很舒服?除此之外,安富莱对一些调试技巧方面很用心,比如把Jlink的各种调试手段基本都挖掘出来了(可以去看它们的专题教程,很香)。

正点原子有原子哥、野火有火哥,这些都是大佬级的人物(出书狂魔、出教程狂魔)。安富莱也有这样重量级人物:硬汉哥。

硬汉哥对技术的追求精神很值得我们学习(技术深度+广度),特别是那一期期安富莱周报,给我们分享了很多新东西、新技术,可以去围观它们的公众号【安富莱电子】。除此之外,硬汉嵌入式论坛由他坐镇,基本上都是有问必答,并且回答很有耐心,大赞。

这里介绍安富莱的篇幅最长,是想让大家多多认识一下安富莱,因为作为STM32教程的三巨头之一,安富莱的用户好像较前两家少很多。

(就我了解目前做STM32教程最火、用户比较多的就只有:正点原子、野火、安富莱这三家。不知道还有没有其它我不知道的,所以这里暂且称它们为STM32教程三巨头)

好的教程应该是要让更多的人看到的,让更多的人支持,这样这些大佬才有能量创造更多的教程来供我们学习。

上面那张图列举了那么多教程,其实有些还是挺不错的,不知道为什么现在基本都看到了。比如:

众想科技,当时我觉得那应该是从51转到STM32最好的入门资料,教程的编码习惯跟我们学51时的编程习惯差不多,关键是那位老师现场敲代码,一个一个字母地敲,包括STM32的固件库函数,当时MDK还没有补齐功能,当时很是佩服。

以为它会发展得很好,但是现在基本上都没听说过众想科技了。(估计是它的教程收费的原因,基础教程免费,提高教程收费)

4、普中科技

普中科技特点:开发板便宜、开发板便宜、开发板便宜。实在买不起上面三家的开发板的可以选择这个。

一百八还带屏幕,太香了。我大学时买了一块,现在还有留着。其它没啥说的,它有的上面三家都有。

5、其它

这里顺便介绍一个B站的教程:

https://space.bilibili.com/203095676/

这是恩师的B站视频教程,目前有几个专栏:STM32入门编程、RT-Thread、硬件电路讲解、大杂烩。

感兴趣的朋友可以去围观学习。

6、总结

几个教程的特点:

  • 正点原子、野火:用户较多,论坛热闹。

  • 安富莱:代码规范、代码框架比较接近实际工程项目,当然论坛也挺热闹。

  • 普中科技:板子便宜。

上面也大概分析了各个教程的特点,自己根据自己的情况(基础、money等)选其中一个板子,跟着教程走就可以了。其实,入门了之后,每一家的代码都可以用的,只需稍微修改一下。

推荐:这几家的开发板都有面积大的、面积小的。大小就是开发板主控外围搭的一些硬件电路多不多,你能做的实验多不多。建议买个不大不小的,功能稍微多一点的,因为作为初学者,大概都比较喜欢玩一些比较直观的实验。

买个带屏的,把自己对象的照片显示到屏上去,这够直观、可以足够激发自己的学习兴趣了吧

当然大板子有的功能小板子也可以有,但是得用跳线连接一些模块,怕到时候是因为线接不对又不会排查,导致实验结果出不来,很容易就给劝退了~

看视频还是看书?

如果对STM32没有概念,可以先看几节视频了解了解。有大概了解之后就可以直接看书了,毕竟看视频比较花时间,而且效果不太好。

当然有些朋友可能比较喜欢看视频,那也可以,但是要有做笔记的习惯,好记性不如烂笔头,不然你突然忘记了视频讲的某个知识,想要复习的话你就得去翻视频,很耗时间。

我是比较喜欢看书的,可以做笔记、涂涂画画。无论如何,都要培养看书的习惯,逼自己看书,最终要进行提高,都是要回归到书本上去。

用寄存器还是库函数?

STM32有两种编程方式,一种是用寄存器的方式,另一种是库函数的方式。对于初学者而言,可能后者较容易上手。

学从难处学,用从易处用。学习阶段,能学多深就尽量学多深,这样基础会打得比较牢。

不只是为了学STM32而学STM32,我们的目标是:学完STM32,换另一款芯片也能很快上手。基础有多牢固,换另一款芯片上手就有多快。

现在STM32有好几种库函数,也有一些辅助工具如STM32CubeMX这种工具,这种是让熟手用的,新手就先暂时先别去碰这种了,因为这些工具给我们屏蔽了太多东西了,不利于我们的学习。

下面是群友分享的网上关于STM32CubeMX与HAL的一些观点,我也比较赞同。

虽然很多人都推荐只学库函数,但是我觉得在掌握库函数的同时也是很有必要学习一下寄存器的操作方式,因为以后有可能会遇到直接操控寄存器的情况,比如之后进行Linux驱动的学习。

库函数其实就是对寄存器操作的封装,对寄存器的操作也不难,就是一些位操作,可查阅往期笔记:C语言、嵌入式位操作精华技巧大汇总

不用全都学

那些开发板的教程多则上千页,少则几百页/几十个章节:

不用全都学,不然等你学完后面基本就会忘记前面。学一些基本的、通用的、常用的外设:GPIO输入输出(点灯、按键)、EXIT、TIMER、UART、I2C、SPI、ADC、DAC等,当然还有其它的。

这些用得多,先把这些给学了,相信到时候学完了你也有自己的思考了知道该学什么了。等我们入门之后,要用什么再去学什么完全来得及,关键是我们得在平时的学习过程中培养这种能力。

学以致用。在学的过程中,可以尝试着diy一些东西、做一些小作品,实在不知道做什么的话论坛逛一逛,一堆好玩的东西。跟着别的人的教程来做,能做出来也是一种能力。

不要以为别人的教程写得很简单,实际自己去做的时候才知道会遇到什么困难。在解决困难中成长,那才记忆深刻。

其他

以前我刚开始学STM32的时候忽略了很重要一点:阅读参考手册。导致很多东西都没有理解。

所以建议:多看手册、多看手册、多看手册,很多你在看教程看不明白的知识可能可以在参考手册里找到解释。

51单片机推荐书籍

看到后台有一些留言51单片机的,估计正在学51的读者也不少。而本公众号应该不大会分享51相关的知识,因为我工作用不上 ,而且我现在对51单片机也不熟。

所以这里顺带推荐两本51单片机的书籍:

  • 宋雪松老师的《手把手教你学 51 单片机-C 语言版》

  • 郭天祥老师的《新概念51单片机C语言教程.入门、提高、开发》

两本书都很赞,不仅仅很详细的讲解了51单片机的知识,而且拓展了很多很有用的知识。

总结

写了一堆,完全是想到什么写什么,可能有点乱,还是希望可以对一些朋友有帮助。下面小结一下:

  • 学51/STM32:买开发板,跟着教程学。

  • 学从难处学,用从易处用。

  • 基础不牢,地动山摇。

1.美国再出狠手!这家中国创业公司被下禁令:技术无法转回国,IPO 计划搁浅

2.TIOBE 3 月编程语言排行榜:Java 大涨,Delphi 辉煌不再!

3.默默无闻的嵌入式技术,其实一直在创新中求发展

4.震惊!FPGA运算单元可支持高算力浮点

5.6 个步骤,搞定 AI 车牌识别器!(附详细分析)

6.WiFi芯片出现Kr00k漏洞

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

干货!学习STM32的一些经验分享 的相关文章

  • 51单片机 数码管中断操作

    实践目的 1 掌握中断的概念和思想 2 掌握51单片机中断系统和相关软硬件设计 实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字
  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • 初始化 ST-Link 设备时出错 - 无法连接到设备

    我目前正在使用 ST Link 调试器对我的 STM32F3 Discovery 板进行编程 我使用的IDE是Atollic TrueStudio 5 5 2 现在我面临一个非常奇怪的问题 那就是我不断收到消息 初始化 ST Link 设备
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 擦除后无法写入闪存

    所以我不能在擦除后直接写入内部闪存 如果写操作之前没有擦除操作 那么我可以 有什么想法吗 编程函数返回 成功写入 值 但查看内存时 没有写入任何数据 这是代码 uint32 t pageAddress 0x08008000 uint16 t
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • Python Pandas面试题及答案

    Pandas是一个开源库 xff0c 可在Python中提供高性能的数据处理 Pandas这个名称源自 面板数据 一词 xff0c 这表示来自多维数据的计量经济学 它可用于Python中的数据分析 xff0c 并由Wes McKinney在
  • podman简介

    podman简介掌握docker 跟上云时代的步伐 Podman是一个开源项目 xff0c 可在大多数Linux平台上使用并开源在GitHub上 Podman是一个无守护进程的容器引擎 xff0c 用于在Linux系统上开发 xff0c 管
  • 运维工程师从月薪 5K 到 50K,中间都经历了什么?

    做 运维 感觉像网管怎么办 xff1f 新工作运维3个多月 xff0c 天天就是维护重启服务器 xff0c 更新代码 感觉这样下去几年后就没有什么竞争力了 这是一个热门运维问题 xff0c 也是很多刚进入运维工作的同学面临的心境 确实 xf
  • Python初学者的自我修养,找到自己的方向

    Python初学者的自我修养 xff0c 找到自己的方向 对于我来说Python的应用场景主要是机器学习 深度学习相关 xff0c 对于其他的场景涉猎不多 因此本文的目的并不是列举出一系列小项目给你们练手 xff0c 而是希望引导大家思考这
  • 这100个shell脚本案例,你都知道吗?一篇教会你写90%的shell脚本

    shell 是一个应用程序 xff0c 它连接了用户和 Linux 内核 xff0c 让用户能够更加高效 安全 低成本地使用 Linux 内核 xff0c 这就是 Shell 的本质 shell脚本就是由Shell命令组成的执行文件 xff
  • 掌握它=掌握k8s!Kubernetes中文文档,学习提升看这一篇就足够

    Kubernetes又称 xff08 k8s xff09 xff0c 这几年可谓是非常的火热 xff0c Kubernetes让部署容器化的应用简单并且高效 xff0c 越来越多的程序员都想学习和掌握它来提高自己的效率 先来了解一下它的背景
  • Adaptive Autosar 整体架构理解

    1 总体说明 xff08 图片来源主要来源于Simulink 以及 Vector xff09 在Autosar官网 xff08 autosar org xff09 上 xff0c 目前CLASSIC PLATFORM 更新到4 4版本 xf
  • 244页Prometheus操作指南,内容详尽讲解细致

    Prometheus在监控工具中有多少话语权 xff1f 作为一款开源的监控工具 xff0c 早早地就在云原生计算基金会中毕业了 xff0c 如今已经成为了云原生应用的首选监控工具 xff0c 在国内外被广泛应用 Prometheus俨然已
  • 在 Linux 终端上的 10 个有趣的命令

    Linux 的命令行不仅是一个复杂且强大的命令所在地 xff0c 同时也是一个有趣的乐园 在本文中 xff0c 我整理了一系列有趣的 Linux 命令 xff0c 您可以从中获得乐趣 1 cmatrix 本列表中的第一个必须是 cmatri
  • 80篇+网络安全面试经验帖

    网络安全面试经验80篇 43 xff0c 看完妈妈再也不用担心我面试的问题了 汇总以下安全服务岗的面经 xff1a 渗透测试 红队攻防 代码审计 安全研究 红队开发 主要由两部分组成 xff1a 个人面试 互联网收纳整理 一 我的实习 am
  • Bash 中的 ${} 和 $() 有什么区别

    像 Linux 这样的基于 GNU 的操作系统依赖于一个名为 Bash 的命令语言解释器或 Shell 来完成它们的大部分计算任务和目标 Bash 是 Bourne Again Shell 的缩写 xff0c Bunne Again She
  • Go 服务端开发,请牢记这几条

    服务端开发一般是指业务的接口编写 xff0c 对大部分系统来说 xff0c 接口中CURD的操作占了绝大部分 然而 xff0c 网络上总有调侃 CURD工程师 的梗 xff0c 以说明此类开发技术并不复杂 但我个人认为 xff0c 如果仅仅
  • 域格4G模块串口开机自动透传的使用

    首先要求是模块版本为串口自动透传版本 1 模式切换 从透传模式切换至临时指令模式的时序 xff1a 1 串口设备给模块 连续发送 43 43 43 xff0c 模块收到 43 43 43 后 xff0c 会给串口设备发送一个 a 在发送 4
  • 网红送餐无人车冒充AI,真人海外远程操控

    美国网红外卖机器人Kiwibot实际由远在南美哥伦比亚的真人远程操控 xff0c 每人时薪不到2美元 xff0c 最多控制三台 2017年成立的Kiwi Campus公司累计获得200万美元融资 xff0c 约人民币1414万元 xff0c
  • 国产开源基础软件MiniGUI宣布支持RT-Thread!

    北京飞漫软件技术有限公司宣布 xff1a 将在 MiniGUI 4 0 2 版本中支持国产操作系统 RT Thread xff01 这是自 MiniGUI 创始人魏永明在本月初宣布启动 1998 年年底 xff0c 魏永明开始在清华大学开发
  • 既然C编译器是C语言写的,那第一个C编译器是怎样来的?

    来源 xff1a 伯乐在线 xff0c 作者 xff1a Chaobs 首先向C语言之父Dennis Ritchie致敬 xff01 当今几乎所有的实用的编译器 解释器 xff08 以下统称编译器 xff09 都是用C语言编写的 xff0c
  • Oracle推出全球首个自治操作系统~

    原创 xff1a 程序员的那些事 xff08 id xff1a iProgrammer xff09 导读 xff1a 保持系统的修补和安全是 IT 部门目前面临的最大挑战之一 在大规模云环境中 xff0c 此类任务乏味 容易出错 xff0c
  • 基于Autosar的网络安全理解

    目录 1 车载网络安全说明 2 常用的安全加密算法 2 1 对称加密 2 2 非对称加密 2 3 混合加密 2 4 单向散列函数 2 5 消息认证码 2 6 数字签名 3 Autosar的加密模块 3 1 模块说明 3 2 关键数据流说明
  • Linux实用程序——Make快速入门

    1 Make make 是 linux 系统的实用程序 它用于管理对于大型程序的自动编译任务 xff0c 自动决定程序某一部分需要重新编译 xff0c 并发出编译指令 虽然 xff0c 我们最常见于 C 语言程序的编译 但是 xff0c m
  • 干货!学习STM32的一些经验分享

    前言 前两天在群里看到群友们在讨论学习STM32的话题 xff0c 并且今天也有一位机械专业的准研究生读者也问了STM32的入门问题 正好我也有一点点经验 xff0c 所以试着分享一下这个话题 我也不是什么大神 xff0c 只是一名普通的工