怎么学习单片机?我给大家分享一下我的单片机学习之路。
我的单片机可以说是自学的,过程有点曲折。
刚开始是啃理论,学习单片机的设计框架,内存、寄存器,GPIO口功能,定时器,单片机汇编语句等。
每天背概念,记理论,过了大概一个月,结果肯定就是一个懵逼的状态。
正在这个懵逼的时候,实验室的一个同学建议我先学C语言,再学习单片机程序开发,说汇编没有啥用。
我又花了2-3个月的时间学习了C语言,买了一本谭浩强的C语言教程,从头到尾抄笔记,抄完了几个笔记本,但这次更加迷茫。
因为大学里的学习,都要靠自己,老师没有太多的时间专门辅导你,而且自己又不是那种特别优质的学生,是得不到老师的特别眷顾,同学之间有存在一些比较幼稚的比较和竞争。可以帮助你的人很少。
后来我自己买了一个电脑,那种大尾巴的台式机,开始自己装软件,在淘宝上买了一个开发板,开始了一个大胆的尝试和投资。
很快,我完成了点亮第一个LED灯的实验,后来又学会了GPIO的外部中断,定时器,串口通讯,LCD1602显示,数码管驱动等。
每完成一个功能,都是特别的兴奋,尤其是点亮第一个LED灯的时候,那种喜悦和满足感相信大家都是知道的。
虽然刚开始有点曲折,但结果是美好的。
大学毕业之后,找工作就有点傻眼了,找不到工作,没人要。
你有工作经验吗?你做过什么项目?你是应届生?说到和单片机开发相关的招聘需求,我几乎都不能满足,想撒个谎都骗不了别人。
如果我现在出去招嵌入式单片机工程师,如果你是应届生,不要。
如果你没有单片机开发经验,等我通知。
或许你不相信,但现实就是这么残酷的。
甚至我找第二份工作的时候,也是面对同样的残酷现实,面试官给一个全英文的考卷,我不知道从何下手,特别绝望和不自信。
其实说到底,就是自己的开发经验不足,单片机开发能力太差导致的。
回想起来,我成长的还是非常缓慢的。
大学的时候,就是做一些简单的单片机程序,复杂点的就是电子时钟,红绿灯计时控制器之类的。
参加第一份工作写的程序就是if 套while,while套if之类的,当时也只能做基于51内核的单片机产品。
几年之后才开始慢慢的接触STM32单片机,学习单片机程序开发的框架,消息队列等相关知识……
想想自己的成长之路,感觉自己走了好多弯路,浪费了太多的时间。
如果有人问我,如果再给我一次机会,会如何去学习单片机程序开发?先学什么?如何入门?
1.首先,学习单片机C语言基础
C语言是单片机程序开发的基础,所以首先是学习单片机C语言的基础知识。
有人问,单片机汇编语言,要不要学习?
汇编语言是最接近单片机底层机制的语言,运行效率最高,但是汇编语言学习相对比较复杂,而且可移植性差,不同芯片厂家的汇编也有所差别。
所以建议大家先学习C语言,等你完全掌握了单片机程序开发之后,再有需要的时候再去学习。
从C语言开始入门单片机相对比较容易,通用性强。
C语言学习过程中,大家要注意一个误区,再刚开始学习单片机开发的时候,只需要C语言的一些基础语法和变量定义就可以开始了,不需要深入的学习.
C语言太强大了,如果深入的学习,会导致你进入一个学习的误区。
2.从C51单片机开始学习单片机,掌握单片机的相关理论知识
C51内核单片机可以说是最经典的。
C51单片机的寄存器相对比较少,所以我们可以从芯片底层深入了解单片机程序的工作原理和单片机程序开发。
其次,C51单片机的入门学习相对比较简单,可以尽快的上手,同时可以培养大家的兴趣。
3.进一步提升C语言知识,结构体,指针,枚举,队列等,再学习STM32单片机。
C51内核的单片机学习完成之后,大家就需要提升一下C语言开发能力。
大家要掌握结构体,指针,队列等相关知识。
这块无际单片机编程也有相关系统课程和源码,都是无偿分享,需要自行去查找,这里就不方便留链接那些了。
STM32单片机的资源相对就比较丰富,FLASH,RAM的空间更大,工作的频率更高,可以做一些更加负责的产品。
STM32单片机的学习,建议大家直接通过标准库的方式学习即可,不需要深入的去了解相关寄存器,寄存器我们在需要的时候再去查看。
其次在STM32单片机上我们还可以跑一些比较简单的小系统,例如FreeRTOS等。这样可以提高程序的运行效率。
4.通过实战掌握单片机程序开发
学习理论是非常枯燥的,而且也是非常耗时的,时间太久了就失去了继续学习的兴趣和毅力。
我们学习的目的就是为了实战,那我们为何不去通过实战来掌握单片机程序开发的理论知识呢?
有了单片机程序开发的基础,和一些简单的单片机基础,就直接可以开始一些简单项目的实战了,然后循序渐进。
在实战过程中,遇到问题,就去学习相关的理论知识,然后完成实战开发,这样学习的东西更加的牢固,也会更加的有效。