历史上的今天
返回首页

历史上的今天

今天是:2026年01月03日(星期六)

2023年01月03日 | 怎样学会单片机?先学什么,怎么入门?

2023-01-03 来源:zhihu

怎么学习单片机?我给大家分享一下我的单片机学习之路。

我的单片机可以说是自学的,过程有点曲折。

刚开始是啃理论,学习单片机的设计框架,内存、寄存器,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.通过实战掌握单片机程序开发

学习理论是非常枯燥的,而且也是非常耗时的,时间太久了就失去了继续学习的兴趣和毅力。

我们学习的目的就是为了实战,那我们为何不去通过实战来掌握单片机程序开发的理论知识呢?

有了单片机程序开发的基础,和一些简单的单片机基础,就直接可以开始一些简单项目的实战了,然后循序渐进。

在实战过程中,遇到问题,就去学习相关的理论知识,然后完成实战开发,这样学习的东西更加的牢固,也会更加的有效。


推荐阅读

史海拾趣

赛微(Cellwise)公司的发展小趣事

在技术创新和产品研发的过程中,赛微高度重视知识产权的保护和管理。公司积极申请各类专利和软件著作权,加强知识产权保护力度。截至目前,赛微已经拥有国际/国内软件著作权98项,国际/国内专利166项,正在申请的国际/国内专利64项。这些知识产权的积累不仅提升了公司的核心竞争力,也为公司的长期发展奠定了坚实基础。

Communications公司的发展小趣事

在通信行业的细分市场中,一家名为“精准通信”的公司凭借其专业的技术和精准的市场定位,逐渐崭露头角。他们专注于为特定行业提供定制化的通信解决方案,如工业自动化、医疗信息化等领域。

通过深入了解行业需求和痛点,“精准通信”成功开发出了多款具有针对性的通信产品,有效解决了行业内的通信难题。他们的产品和服务得到了客户的广泛认可,市场份额也逐年攀升。

Custom Electronics Inc公司的发展小趣事

在市场竞争日益激烈的背景下,CEI意识到品牌建设的重要性。公司加大了对品牌形象的宣传力度,通过广告、展览、研讨会等多种方式,提高了品牌知名度和美誉度。同时,CEI还注重产品质量的提升和售后服务的完善,赢得了广大客户的信赖和支持。

Delkin Devices公司的发展小趣事

为了更好地服务全球客户,Delkin Devices积极拓展海外市场。公司在欧洲设立了办事处,以便更直接地接触欧洲市场并了解当地客户需求。此外,Delkin Devices还通过参加国际展会、建立合作伙伴关系等方式,不断拓展其在全球范围内的影响力。通过这些努力,Delkin Devices成功将产品销往全球多个国家和地区,实现了国际化布局和市场拓展。

Eaton公司的发展小趣事

自1993年进入中国市场以来,伊顿公司凭借其先进的技术和丰富的经验,迅速在电网、石油化工、轨道交通、数据中心、商业楼宇等多个行业建立了市场地位。伊顿在中国的发展过程中,不仅带来了全球领先的产品和解决方案,还积极参与了本地市场的建设和创新。通过一系列的战略合作和收购活动,伊顿在中国市场的业务不断扩展,为中国经济和电气工业的发展做出了重要贡献。

Crowd Supply公司的发展小趣事

在Crowd Supply平台上线不久,一家专注于智能家居设备的初创公司选择在这里发起众筹。这个项目凭借其独特的设计和前瞻性的功能,迅速吸引了大量关注。经过一段时间的筹备和宣传,该项目成功筹集到了所需的资金,并顺利进入了生产阶段。这一成功案例不仅为Crowd Supply赢得了良好的口碑,也为其后续的发展奠定了坚实的基础。

问答坊 | AI 解惑

vhdl分频器设计

将一个4MHz的信号通过8MHz的分频器,得到周期为2s的信号,然后加一个锁存信号,将此信号通过计数器,译码器,数码管。怎么设计,哪位高手能给个详细的图,或者略加讲解…

查看全部问答>

430寄存器

430寄存器,应该还是比较实用的!…

查看全部问答>

DIY 个浪漫光影棒,报名请跟帖!

经过大家的集思广益,本次活动确定制作大家熟悉的,伴有烂漫神奇色彩的魔幻摇摇棒~  摇一摇,摇出你的心意,摇一摇,摇出你的勤劳~  换种方式大胆说出:I LOVE YOU! 年轻的工程师们,你们还等什么?DO IT YOURSELF ! 参与活 ...…

查看全部问答>

关于CE的内存结构的问题!

据我所知,CE中分32个进程槽,每个进程可以使用32M的内存。 加起来就是1GB。。 可是CE最大支持512M物理内存。 如果32个进程同时运行,,哪儿有那么多物理内存可用呀???? …

查看全部问答>

智能设备编程为何没有Application.StartupPath

提示Application没有这个StartupPath属性…

查看全部问答>

程序裸机运行可以,加入系统里为什么不行?

一个裸机程序,温度传感器裸机可以测试通过,串口可以打印温度信息,为什么把它移植到wince操作系统下,做成一个一按键就读取数据的驱动程序,为什么读取的数据不对呢?…

查看全部问答>

keil+uC/OS,是如何实现在任务的堆栈中操作局部变量的?

keil+uC/OS,是如何实现在任务的堆栈中操作局部变量的? 比如在程序中建立了一个任务TASK1,任务中定义了几个局部变量a,b,c, 在任务建立的时候,分配的堆栈是arrStask[500]。 那么程序执行到TASK1的时候,是如何保证把几个局部变量分配到对应的 ...…

查看全部问答>

连到系统上的设备没有发挥作用

以前做好的一个VISTA的NDIS filter,现在编译出来用osrloader总是加载不起来。错误原因就是“连到系统上的设备没有发挥作用”。试了下把WDK6000自带的filter编译出来也是同样的结果,应该不是代码的问题。出现这个的原因是什么呢 …

查看全部问答>

WCE状态栏上改变窗口大小的三角标问题

    很多软件的主界面的最下方,都有一个状态栏,而状态栏的右下角的一个三角标,可以用鼠标拖动改变窗口的大小,这就是状态栏的SBARS_SIZEGRIP样式,但Windows CE中没有这样式。WCE下如何实现类似功能?…

查看全部问答>

电路方面,如何从0开始学?

以后后想做嵌入式。 但是我就懂点C和UNIX方面的,现在没有任何的硬件,电路基础。 我听别人说,看《数字电路》  我买了这本书,发现看不懂,好像需要数字逻辑方面的知识,我又买了本《数字逻辑与数字系统》,但是发现还是欠缺知识。 ...…

查看全部问答>