学习STM32的一点经验分享
前言
前两天在群里看到群友们在讨论学习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:买开发板,跟着教程学。学从难处学,用从易处用。基础不牢,地动山摇。猜你喜欢:
长文 | 花了两天时间整理了STM32中的一些C语言知识点
LittlevGL在STM32上的移植使用
STM32如何收发float类型数据?
STM32串口IAP分享
STM32的ISP是怎么一回事?
STM32中另一种打印调试的方法
手把手教你在STM32上使用nanopb
STM32在SRAM、FLASH中调试代码的配置方法(附详细步骤)
1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!
分享两点提高编程能力的心得
大家好,我是杂烩君。
本文简单分享两点可有效提高我们编程能力的小建议。
1、温故而知新
技术发展,资料越来越多,我们在不断学习新知识时,也要不断巩固一些曾经学过的知识。特别是一些很重要、而且之前掌握得不是很好但又很通用的知识。
资料在精,不在多。
往往有那么几本书,可以深深地影响着我们:
读了之后可以引发我们的兴趣读了之后可以打通我们对某一块知识的理解读了之后可以提高我们的认知读了之后能让我们快速入门……
如果你还没有这么几本书,那可能是读的书还不够多,还没遇到。
类似这样的书,有很多。一开始可能因为我们的知识体系构建得还不够完善,导致我们并不能全部参悟,所以可以多读几遍。
就比如我们读中学的时候,再去看小学的知识的时候,就感觉简单很多。
那是因为我们的知识体系在不断完善,这时候再尝试去看一些之前学不懂的知识,可能就看懂了。但也可能还是看不懂,需要继续积累知识。
经常有小伙伴问我推荐嵌入式的相关资料。
其实,每个人的情况都不一样,我推荐的也不是最合适你的,需要你自己去尝试阅读、自己差不多能看得进去、学得懂的,那这个资料才是适合当前阶段的你。
比如:
有些人看得懂《啊哈C语言》、有些人看得懂《C陷阱与缺陷》;
有些人看得懂正点原子的STM32教程、有些人看得懂安富莱、野火的STM32教程,比如我,一开始是看安富莱的STM32教程的,因为当时学校买的开发板就是安富莱开发板,但是我也是刚开始学,看得很懵,但现在看来,人家这教程做得太好了!
有些人看得懂正点、野火的嵌入式Linux教程,有些人看得懂韦老师的嵌入式Linux教程等等。
有些答主大佬可能会贬低某些资料、教程,其实没必要,很多时候那些被贬低的才是最适合初学者的。
咱们嵌入式大杂烩公众号专注于嵌入式技术,主要专注于嵌入式基础知识的分享。
下面简单推荐一些比较大众的嵌入式资料,大家可自己去尝试阅读。
(1)开发板配套教程
首先,第一手很重要的资料就是各大开发板的配套教程,有单片机裸机的、有RTOS、也有嵌入式Linux。
以下排名不分先后,各有各的特点。
安富莱https://www.armbbs.cn/forum.php?mod=forumdisplay&fid=49
百问http://download.100ask.org/
野火https://doc.embedfire.com/products/link/zh/latest/index.html
正点原子http://www.openedv.com/thread-13912-1-1.html
讯为http://bbs.topeetboard.com/forum.php
(2)纸质书籍
对我影响深远的一些书:
书名就不打了,看图吧,手累
当然,有些书现阶段我也还没看完,或者说有些内容现在也还看不明白。后续慢慢看~
有些书籍也有电子档,可以私信我进行获取 。
2、思考+重构
我们多重构自己的代码或者别人的代码,也是可以自我提高的。
我在工作中,有过几次重构经历,有模块重构、也有整个工程的重构。每次做完,都感觉收获颇丰。
重构时,我们会去思考模块设计的不足:
逻辑是否有漏洞模块是否高内聚是否与其它模块有较强的耦合是否方便维护与扩展分层是否合理是否有冗余代码编码是否规范命名是否清晰注释是否完善是否还有更好地实现方法是否有与其它模块共用一些数据各模块交互的数据能否更简练……
重构是一件很爽的事情。但在工作中,往往这种机会是非常少的,珍惜每一次可以重构的机会。
公司里,可能有如下两种情况才会有可能重构:
现有方案确实漏洞太大了,再如何完善都不能根本性地解决问题,这时候可能会重新梳理、梳理新的解决方案、然后大改。项目更新迭代时,这时候可能会涉及到多个模块的修改,这时候就有重新梳理、重构的机会。否则,只要程序能跑,大多数情况下都不会轻易地大改。
如果,工作中没有这样的机会。那也可以从自己的日常学习入手,比如平时业余时间写的代码啊,或者技术博客啊。以前写的代码或者技术博客,现在再去看,可能又会发现很多的不足之处,可以不断地修改完善。
以上就是本次的分享。
如果觉得文章不错的话,麻烦帮忙点赞、收藏、转发,谢谢大家!
嵌入式必备之Git的使用
C语言、嵌入式中几个非常实用的宏技巧
例说嵌入式实用知识之JSON数据
相关问答
stm32初学者买 安富莱 的开发板怎么样?板载资源丰富?stm32初学者:建议买原子的板资源丰富,很多的案例可以用。stm32初学者:建议买原子的板资源丰富,很多的案例可以用。
STM32是什么,是32位的单片机吗?STM32是一款普通的单片机,一款能够让普通工科学校的孩子吃上饭的单片机。1、嵌入式软件工程师的一个方向,就是对STM32进行编程。一般谈起嵌入式,首先想到的...
想学stm32,大家觉得那款板子比较好?普中开发板STM32F103C8+51单片机。把STM32当51来玩,比较基础。安富莱STM32F103ZE,比较早的开发板了,例程资料不错。适合玩STM32的进阶功能。其他的野火、神...