当前位置: 华文问答 > 数码

单片机学到什么程度才可以去工作?

2024-01-17数码

我从用人部门的角度说说。

首先你要抛弃硬件,专攻软件。不是说硬件不行,而是硬件有专门的人做,重点也不在 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名校或硕士学位的加持,基本上能找到一份还不错的工作了,入职就能上手公司的项目。

如果没有名校或学位的加持,你还得再努力一把,才能从激烈的竞争中胜出。以下这些技能可以给你加分,你看情况学,不同行业对这些组件会有取舍:

  • Cortex-M 内核:理解MCU内核各部件的工作机制,比如启动流程、指令集、存储映射、SysTick、异常和中断等
  • IoT操作系统:比如RT-Thread或鸿蒙,学习里面的设备驱动模型、文件系统、低功耗、以太网及TCP/IP协议栈等,你可以把它当作 Linux 的乞丐版学习,以后对你学习 Linux 也有帮助。
  • RS485 & Modbus:学会Modbus协议的应用场景、各类报文格式、通信时序、各个常用命令。很多工业产品都会用 Modbus 通信。
  • CAN:学会 CAN 协议报文格式、通信时序、各个常用命令。汽车行业必用。
  • 蓝牙或USB:要学习它们的协议栈结构、通信时序、各种常用的应用层端点等。这个不用说了,物联网必用。
  • PID:学会一种 PID 算法的原理,并会快速调试 PID 参数。工业控制必用。
  • 传感器:各种传感器,如陀螺仪、温湿度等
  • LCD&UI:学会一种UI库的常用控件。同理,初学者可以不学底层驱动的移植
  • Bootloader:学习Bootloader的原理、空间分配、在线升级及通信等
  • TCP/IP:学会TCP/IP分层模型、链路层常用协议、SOCKET编程接口。为什么要专门学习分层模型和链路层协议?因为可以从中借鉴很多通信经验,都是业界大神走过的路趟过的坑,以后针对不同应用场景设计出来的协议(栈)会成熟可靠很多,而不是随意弄私有的、不健壮的包格式。
  • C++:主要学习面向对象的基本特性,像异常、RTTI、STL 等高级特性,可以先不学。如果上层业务逻辑能使用 C++,整个项目的可读性都会好很多,能轻松应对大型项目,个人认为 C++ 在单片机中会越来越多应用。
  • 运动控制算法:比较专业的领域了,不解释
  • 再后面的技术方向,就脱离了单片机了,一般有以下选择:

  • 硬件
  • Linux + 驱动
  • QT C++ 应用
  • Android/iOS/Java Web 应用
  • 架构师
  • 最好,祝大家职场顺意!

    我是折腾总监,喜欢从第一性原理讲解一些有趣的技术,欢迎关注,让我们一起探讨学习,一起驰骋于浩瀚的知识海洋。