10年前自学单片机。
当时主要学了51单片机。从零开始到这个时候找到工作大概需要3-5个月的时间。我忘了多久了。
当时竞争没有现在这么大,很多新的单片机还没有出来,所以我们选择相对集中。
我只学了51个芯片,然后做了一个项目,撞见了就有工作了。
接触第一份工作的时候,我用的是STC的51单片机作为读卡器,是智能建筑的楼层权限控制板。
被煮熟后,老板慢慢认可了我的技能,丢了一些稍微复杂的产品让我做。
老方案是用恩智浦芯片做的,虽然恩智浦芯片比较稳定,但是价格还是高了一点,后来老工程师推荐了STM32芯片。
老板让我先研究一下STM32芯片。为了得到老板的进一步认可,我忍痛在某宝买了一块STM32开发板。
打开开发板例程的那一刻,我是被逼的。这到底是什么?
以前用51和恩智浦单片机开发时,都是看芯片手册中配置寄存器的方式来开发的。STM32是官方库函数,可以直接调用使用单片机外围设备。
刚开始不习惯,不知道每个库函数的功能。当我习惯之后,瞬间觉得恩智浦一点味道都没有。
以后任何项目我都会优先考虑单片机STM32,使用起来太方便了,而且芯片稳定,不会给你带来一些莫名其妙的问题。
后来我写了一个程序架构,解决了大部分产品的一些痛点,比如LED特效、多按键多功能检测、队列等等。
基于这个架构,只要用STM32开发产品,2-3周就能完成产品的代码部分,获得了领导的认可。
主要编程步骤和开发模式与目前市场上的单片机相似。很多芯片也在学习STM32模式,即使库不完善,也会提供外设例程。
原因很简单,你只有让别人快速把你芯片用起来,同时保证价格和质量,别人才会考虑用你的芯片。
不管是什么单片机,无非就是2种编程模式:
1. 基于寄存器开发,原厂提供例程

2. 基于固件库开发

基于寄存器写出来的代码占用空间更小,执行效率更高,缺点是开发周期会长一点。
基于固件库开发占用内存空间更大,执行效率会慢一些,但是移植性好,也稳定,开发周期快挺多。
除了开发模式的区别,51和STM32还有资源和性能上的区别。
当然,拿这两个芯片比资源和性能明显不合适,因为针对的市场不同,51是针对低端产品,比如说小家电这种。
STM32是针对相对高端的产品,比如说无人机、工业控制、智能家居等等。
我看过一些文章,说51单片机已经过时了,这种基本是外行人,或许都没从事过这个行业。
有些产品非常简单,可能就一个按键,一个LED灯,如果你用STM32去做,老板第二天就把你干掉。
实际做产品需要考虑的问题非常多,成本就是占比很大的一块,51单片机成本比STM32低很多。
还有一些建议直接忽略51单片机去学STM32的。
我个人建议的学习路径是,先学51打基础,深入理解单片机的原理,再学习STM32做应用,提升自己的编程水平。