我从用人部门的角度说说。
首先你要抛弃硬件,专攻软件。不是说硬件不行,而是硬件有专门的人做,重点也不在 MCU 这块。从硬件的角度,单片机本身没什么好学的。
如果你强行软硬件一起学,大概率都学不深,都会一点。当然迷你型公司会喜欢这种工程师,一人当一个团队用非常省开发成本。这种公司有多迷你?大概率是初创公司,只有一两个技术人员,同时负责软硬件设计,要布板焊板调试、要出工艺小批量、要下厂生产指导和返厂维修,有些甚至还要做结构设计和生产组装。稍微有点规模的公司,就不会软硬件同体了。
所以不做硬件板卡,对硬件的要求就很低了,一般要求看得懂简单的原理图即可。数电模电不用学,懂得简单的电路分析即可,我说的是基尔霍夫定律、戴维南定律、节点法网孔法等,这些就够跟硬件打交道了!
确定了软件方向后,如果你有点C语言基础,直接买个STM32或ESP32的开发板开始学起来。不要专门去学汇编,一般公司都是搞应用的,99%用不上。C语言也不用刻意的学,遇到不懂的,再翻出来学,这样效率会高得多。
不要学Arduino,那玩意不是不好,但毕竟还只是个玩意,灵活性和性能是个问题,所以正经公司都不用它。Arduino 是给学生玩的,我给我小孩(小学生)买了一块,让他找点硬件编程的感觉,他很喜欢。
开发板里面带的各种外设例程,像 GPIO、ADC、DAC、Timer(PWM)、UART、SPI/IIC 都是非常常用的外设,一般项目都会用到,所以你不但要知道他有什么作用,主要应用场景是什么,主要工作原理是什么,你还要一行一行代码自己敲一遍调通。中断至少要会 ADC、Timer、UART。对于常用通信接口,你至少要分得清同步/异步/单双工/全双工,它们各自的用途是什么。你不要只会调用厂家封装好的函数,你还得深入到寄存器层面,老老实实翻看MCU厂家自带的【软件设计手册】和【数据手册】中关于各个外设的详细说明,不要害怕,对于里面的 主要 寄存器,你要理清他们的使用场景,要有能力写代码直接配置或控制寄存器。
这还不够,你还得学一个嵌入式操作系统,比如 FreeRTOS 或 RT-Thread,学会写任务和中断衔接程序这些核心功能就好。不用花精力去学习怎么移植到不同芯片,直接用别人移植好的就行,因为对于企业项目,一般都有人或厂商帮你移植好了。至少要学会多任务的协调工作,不要以为能写一个个独立任务就OK了。最少要熟悉一个命令行系统(如 RT-Thread 的 FinSH,FreeRTOS没带)的使用,能快速的写出需要的调试命令。像 RT-Thread 这类 IoT 系统一般还有设备驱动模型、文件系统、以太网及TCP/IP协议栈等高级功能,可以先不学。
你最好能把这些学习经历包装一下,包装成一个真实项目的样子,你要想好这个虚构的产品有哪些功能,都有什么作用,目标用户是谁,能帮用户解决哪些问题。对于这个产品,你是怎么开发的。千万不要把所有外设都往产品上搬,这样显得很假。有不少工作了的工程师,对于项目和产品,居然一问三不知,只当自己是螺丝钉,只顾自己那块技术,这样会给面试管或领导很不好的印象,即使入职后,大概率不受待见,对于自己的成长非常不利。
经历了这个阶段,如果你有985/211名校或硕士学位的加持,基本上能找到一份还不错的工作了,入职就能上手公司的项目。
如果没有名校或学位的加持,你还得再努力一把,才能从激烈的竞争中胜出。以下这些技能可以给你加分,你看情况学,不同行业对这些组件会有取舍:
再后面的技术方向,就脱离了单片机了,一般有以下选择:
最好,祝大家职场顺意!
我是折腾总监,喜欢从第一性原理讲解一些有趣的技术,欢迎关注,让我们一起探讨学习,一起驰骋于浩瀚的知识海洋。