怎么自学嵌入式?

大家好,我是良许。

十年前我特么真是瞎了眼,机械专业毕业后居然接了个嵌入式的offer。第一天上班,我的领导扔给我一本STM32的数据手册,厚得能砸死人,然后丢下一句"下周之前把GPIO的例程写出来"就走了...

当时我就傻了,GPIO是个啥玩意?C语言也就课上混了60分的水平,连指针都整不明白。那段日子真是度日如年,晚上做噩梦都是寄存器地址和时钟配置。

好在功夫不负有心人,这些年摸爬滚打下来,我从一个连LED都点不亮的菜鸟,变成能独当一面的嵌入式工程师。去年我把多年踩坑经验整理成了《STM32实战快速入门》(点击直达)课程,也算是给走投无路的后浪们提供条生路了。

啰嗦这么多,进入正题,这里我把自学嵌入式的套路和坑都给你交底。

先说说入门硬件,别被割韭菜

刚上手别急着买开发板,市面上那些动辄上百的"豪华套装",大多是智商税。我最开始就被坑了,买了个所谓的"嵌入式学习套件",结果里面一堆用不上的传感器模块,接口还不通用,现在还在柜子里吃灰。

其实一块STM32F103C8T6的"蓝色药丸"开发板真的就够了,20多块钱,麻雀虽小五脏俱全。小破站里很多课程里的所有例程都是基于这个板子设计的。

除了开发板,你还需要:

  • USB转TTL模块(十来块钱)
  • 杜邦线若干(几块钱)
  • 面包板一个(很便宜)

这套配置总共50块左右,能满足入门一年内的全部需求了。别问我为啥知道,因为我第一份工资对半砍用来买书和开发板,结果大部分都用不上,老板还纳闷为啥我总是月底蹭同事泡面吃。

关于学习路径,我踩过的坑

很多培训机构画的路线图又臭又长,搞得好像不把整个计算机科学学一遍就不能写嵌入式似的。扯淡!

我的建议是先搞定这几样:

1. C语言,但不是科班那种学法

大学里教的C语言跟嵌入式用的C语言简直是两回事。你需要特别关注:

  • 位操作(那些&、|、<<、>>)
  • 内存管理(嵌入式RAM紧张,用不好直接死机)
  • volatile关键字(这玩意在普通C教程里基本不提,但嵌入式里超重要)

说个笑话,我刚入职时有次代码审查,主管问我:"你这个变量为啥不用volatile修饰?" 我一脸懵逼:"volatile是啥?能吃吗?" 然后全会议室都笑了...

2. 单片机,直接上手STM32

别浪费时间在51单片机上了,那玩意是上个世纪的产物。虽然有人说"先学51打基础",但我觉得那跟说"学开车先学马车"一样扯。

STM32用HAL库开发其实挺简单的,我之前带过一个实习生,没啥基础,一周就能点灯控制按键了。在我的《STM32实战快速入门》(点击直达)课程里,我就是直接从STM32教起的,省了不少弯路。

3. 别急着上RTOS,先把裸机吃透

很多人急功近利,基础不牢就想学RTOS、学Linux。结果啥都学不明白,代码全是从网上抄的,出了问题一脸茫然。

我建议至少把这些搞明白再考虑RTOS:

  • GPIO控制(LED、按键)
  • 定时器(精确延时、PWM控制)
  • 通信协议(UART、I2C、SPI)
  • 中断处理(这个必须吃透)

我自己当年脑子一热,看了两天FreeRTOS就想做多任务项目,结果搞出来的东西莫名其妙死机,排查了一周才发现是中断优先级设置错了。那会没人指导,走了不少弯路。

实战学习法:别光看书,动手才是王道

说实话,嵌入式这行真不是靠看书能学会的。我书架上十几本嵌入式"宝典",大部分只翻了前三章。

真正有用的学习方法是:

  1. 找个简单项目(比如温度显示器)
  2. 列出需要的知识点(ADC采集、LCD显示)
  3. 有针对性地查资料解决问题
  4. 遇到bug死磕到底

我记得刚学ADC时,书上写得云里雾里,看了三天还是不明白。后来我直接找了个例程,改了改参数,再去数据手册上找对应解释,一下子就通了。先上手实操,遇到问题再补充理论知识。

分享个真实故事:我第一次做UART通信的时候,死活收不到数据。检查了一晚上代码,结果第二天同事瞄了一眼说:"你TX/RX接反了...",当时就想找个地缝钻进去。这种教训,书上学不到啊!

常见陷阱,我全踩过

1. 调试靠printf

初学者都喜欢用printf调试,我也不例外。但嵌入式里printf很费资源,而且有时候会掩盖真正的问题。

更科学的方法是:

  • 用逻辑分析仪(软件模拟的也行)
  • 学会用断点调试
  • 关键变量用LED指示

我在《STM32实战快速入门》里专门有一节讲调试技巧,因为这真的太重要了,比写代码本身还重要。

2. 代码全靠抄

网上的代码质量参差不齐,有些看起来能用,实际上漏洞百出。我刚入行时就犯过这种错,复制了一段"高手"写的I2C驱动,结果在高温环境下莫名其妙出错,折腾了好久才发现是没做超时处理。

正确的学习方式是:理解官方例程,然后自己写。慢一点,但起码知道每行代码是干啥的。

3. 眼高手低

这可能是最普遍的问题了。看了几本书,以为自己啥都懂,但一写代码就傻眼。

解决办法只有一个:多做项目,从小项目做起。先点个灯,再控制个电机,然后做个温控系统...循序渐进。

我当年脑袋一热,想一口气做个"智能家居系统",结果连最基础的传感器都读不好数据,白白浪费了两个月。后来我在课程设计中特意避开这个坑,设计了由浅入深的项目序列,让学员有成就感的同时,也能稳步提升。

学习资源,良莠不齐

说到学习资源,网上一搜一大把,但大部分质量堪忧。我给你推荐几个我亲测有效的:

1. 官方资料必看

ST官网的参考手册和HAL库说明文档虽然枯燥,但是最准确的。别嫌它们难懂,迟早要啃下来。我每天睡前都会翻一小节参考手册,久而久之也就熟悉了。

2. 好书只需几本

  • 《C和指针》:把指针搞明白
  • 《ARM Cortex-M3权威指南》:理解单片机内核
  • 《STM32实战指南》:实用的工程开发参考

别被培训机构的"必读书单"吓到,精读这几本就够了。其他的等用到了再查。

3. 视频课程要筛选

B站上的免费教程质量参差不齐,有些讲得挺好,有些纯属误导。选课程有个简单法则:看评论区老司机的反馈。

我自己录制《STM32实战快速入门》(点击直达)课程时,特别注重把理论和实践结合起来,毕竟我就是被那些纯理论的课程坑过的人。每个知识点都有对应的实战项目,从点灯开始,到最后的MQTT物联网应用,循序渐进。

编外话:嵌入式到底难不难学?

老实说,嵌入式没有传说中那么难,但也绝对不是几个月就能精通的。

最难的部分是:软硬结合、调试困难、问题隐蔽。比如我曾经遇到一个bug,程序偶尔死机,排查了两周才发现是电源纹波导致的。这种问题,单纯学软件是解决不了的。

最爽的部分是:做出来的东西是实实在在能看能摸的。记得我第一次做的智能小车,演示给同事看时,大家都惊叹不已,那种成就感是写网页或APP所不能比的。

从零自学的话,踏踏实实一年,能达到就业水平;三年,能独当一面;五年,能做技术专家。当然,前提是你真的热爱这个行业,不是为了跟风或者高薪。

我自己是从机械转行过来的,啥基础都没有,不知道加班多少个晚上才算入门。现在回想起来,那段苦逼日子反而是最有动力的时候。所以,只要你真的喜欢,肯定能学好。

最后的唠叨

自学嵌入式最大的敌人不是难度,而是坚持。很多人看几天书就放弃了,觉得太难、太枯燥。

但只要你能度过最初的迷茫期(大约1-2个月),后面就会越来越有意思。等你第一次看到自己写的代码控制电路时,那种成就感会让你上瘾的。

另外,找个学习伙伴真的很重要。我当年就是和一个同事相互监督,每周交流进度,才没有半途而废。我的《STM32实战快速入门》(点击直达)课程的学员群也是这个目的,大家互相帮助,一起成长。

最后送你一句我常挂嘴边的话:嵌入式没捷径,但有弯路;少走弯路,就是最大的捷径。

希望你能在这条路上少走弯路,早日实现自己的目标!

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

相关推荐
A小辣椒16 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒19 小时前
TShark:基础知识
linux
AlfredZhao21 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言