最近我的Time Line上又出现了这个问题,看了下问题日志,2014年2月创建的。我真是挖坟答题了哈~为什么呢?是因为觉得,这类问题真的挺有讨论价值的。
我认为,对于「不学51直接用STM32开发」这个问题,还得看一个哲学问题:「你是谁?」
如果你是电子类专业的学生,将来要用单片机/嵌入式谋生的如果你属于这类,51单片机是值得作为入门学习的!原因有几点:
其一,51是相关大学专业必学课程,其实是因为大部分的高校老师只会51了;
其二,51书籍多资料多,同第一条一样是因为一些历史原因;
其三,51麻雀虽小五脏俱全,用来学习是不错的;同样, ** R单片机或者STM8等都可以用来入门,但51还是太经典太主流了;
其四,单片机万变不离其宗,学通51也就会用其他单片机了(其实这是一个经验的问题)。
很多答主都是在三、四点上讲了很多细节化。我下面也稍微写一点:
其实不论用哪一款单片机,片内资源都是差不多的:GPIO、定时器Timer和中断、通信类UART/IIC/SPI、ADC/DAC等等等,这些资源就算换了一个单片机也会非常眼熟。然后是外设,其实这一部分和51无关了:LED、LCD、数码管、各种传感器等等,这些资源当你在51平台学习过之后,在其他地方使用也是一样的;最后单片机开发和debug的能力,我觉得这和经验有点关系了,这里的经验不是浮在水面上那种调用一下API的业务经验,而是深入理解单片机原理的经验。我以前玩51玩得贼溜,后来一接手STM32,几乎总在GPIO上犯错!(STM32的GPIO需要初始化和设定输出输出而STC51不用)然后还有什么中断向量表啊,Flash的读写(先解锁再擦除最后写入)啊什么的,玩51的时候可没接触过那么多!因此,感觉自己玩51玩得差不多的时候,就没必要在51上继续研究了,可以走上STM32的道路。那既然最后都要上STM,为什么我还是推荐51作为入门学习呢?因为51单片机屏蔽了很多高级细节却也足够全面,正如我前面第三点:麻雀虽小五脏俱全。把麻雀研究透了再看其他鸟类不都是一个鸟样吗?只不过这只鸟嘴长那只鸟脚长嘛。
如果你只是业余爱好者,想做点东西自己玩比如题主的情况可能就是属于这一类。而凡事都有两面性的,我这里给的建议就是:不学51是完全没有问题的!甚至不用C语言开发都可以了!
不用51/STM32,那用什么呢?两类平台:Arduino和Raspberry pi(树莓派)。
Arduino只需要学习一点点C语言就可以玩各种硬件,如果有编程基础那么上手就非常快了!对比新手使用51点亮一个LED灯可能要半天时间,而Arduino可能只需要五分钟?为什么呢?一个原因是Arduino平台把能封装的都封装好了!开发者只管调用相应的接口即可,而使用51或STM32的原厂IDE可能还需要查找半天资料。
然后是树莓派,树莓派已经不算是单片机开发了而应该归类于Linux应用开发了。不限制于C语言,Python、JavaScript、Lua、PHP等脚本语言都可以用。
那前面所说的不用C语言开发就是指在树莓派上开发吗?肯定不是了!对于各类微控制器已经有脚本语言开始进军了,比如MircoPython。MircoPython就是可运行在单片机上的Python3脚本语言,可以用Python对单片机进行各种操作等等。当然还有特别self-important(“任何可以使用JavaScript来编写的应用,最终会由JavaScript编写。”)的JavaScript也有类似的平台Espruino。
如果是作为一个Web工程师,能用Python或进行单片机开发干嘛非要用C语言呢?对吧?只是作为一种业余爱好平时玩玩而已,真的没有必要再去学习51或STM32单片机的C语言开发, 而且MicroPython和Espruino都支持STM32了。
但是!任何一个电子专业出身的人都应该能意识到!像这类微控制器脚本语言平台,本身肯定有很大的局限性!首先是性能问题,在单片机上能脚本语言肯定要有一个脚本解析器,这肯定是用C语言编写的了,那么C语言运行脚本解析器,脚本解析器运行用户代码,最后出来的效果肯定慢了很多!当然如果单片机性能足够可能看不出什么。然后就是接口问题。因为我们是用脚本来控制单片机,如果底层解析器没有把一些寄存器的配置引出来,我们就没法做一些事情,比如说如果底层解析器不提供休眠接口,我们就没法对单片机进行休眠,那就没法更低功耗运行了。最后,就是限定板子导致的成本问题,目前来看,所有的脚本语言肯定没法都支持全部微控制器,尤其是更低配置的微控制器,低端单片机有一个好处就是成本低廉:能用STM32进行LED流水灯控制就没必要用树莓派,能用51单片机就没必要用STM32,能用555时基电路就没必要上51单片机了,能用分立元件就没必要用芯片!(皮)
那就应该抵触这类东西吗?说真的我内心是有点抵触的,我抵触不代表我拒绝了解,后来简单玩了这些东西,感觉开发真的不要太方便了!分分钟就能做出一个自己想要产品原型,然后屁颠屁颠地去展示给其他人看,收到许多崇拜的星星眼。可是!如果要继续深入开发甚至打算做出可用的产品,会感到非常力不从心。
所以,在我眼中这类东西和Arduino及树莓派一样,都只是「玩具」而已。我的开发原则还是,能用原厂IDE的就坚决不用第三方IDE,能用C语言的就不上脚本语言。
当然了,上面这一节是「不学51单片机直接学STM32」这话题衍生出来的「单片机用脚本语言开发好不好」,其实都指向我想表达的一个主旨:浮于表面的学习是接触不到核心的东西的,接触不到核心知识而积累下来的那些经验,换一个环境就懵懵懂懂不知所云。虽然都是使用JavaScript语言,但还真觉得前端知识和Espruino平台开发所需知识是完全一样的?
对于题主的情况(不知道目前是什么情况了),目标是想做自平衡小车或者飞行器这样好玩的东西,或有类似情况的读者,那么我的建议就是:在有一定的单片机发基础之后,上购买相关的学习套件,至于这个单片机发基础,对于业余爱好者来说是从51开始还是从STM32开始,问题真的不大。