ysz 发表于 2023-10-4 19:18:38

谁能教教我怎么学单片机,先学什么,怎么入门?

谁能教教我怎么学单片机,先学什么,怎么入门?

lnhssjw 发表于 2023-10-4 19:18:54

二话不说,先推荐一下郭天祥老师的视频;

http://pic1.zhimg.com/v2-f3c672e8d42b611949957530c5edd1b6_r.jpg?source=1940ef5c
链接:https://pan.baidu.com/s/1kL_7AGkneWy4DRxyS1BrjA
提取码:yn08
按照时间轴的方式谈一谈自己的经历;
大一的时候开始接触单片机,觉得这是一个很神奇很酷炫的东西,于是去图书馆借了几本书看起来,大概一个月之后,书看不下了,然后感觉什么都没有学会;
后来去了学校里的一个实验室;
[ 学长:C语言你们现在学了吧?]
[ 我:比较基础的内容都教了 ]
[ 学长:那你自己去x宝买块51开发板,然后配合郭天祥的十天学会单片机先学吧 ]
然后按照开发板配套的教程写了第一行程序,记忆中是这样子的;
#include <reg52.h>
sbit LED = P0^0;

void main(){

    LED = 0;
    while (1){
    }
}后面经过一番折腾,终于把灯点亮了;虽然有很对概念还不是很理解,但是点亮灯感觉像给打开了一扇大门。

http://picx.zhimg.com/v2-18752fc57459bc294fca716db9ebc695_r.jpg?source=1940ef5c
话说回来,最开始的时候,我只看书,缺少了实践,书中细枝末节的理论太多,刚开始初学无法抓住重点,产生了挫败感,打击了自己的学习兴趣。
后面我跟着视频继续学习下去,51单片机算是入门了,但是这只是第一步吧。后面就开始做点小的项目,把技术应用起来。我先后做了循迹小车,数字收音机,电子万年历,光立方,依然记忆犹新。还是非常有趣,非常好玩的,像是打开了新世界的一扇大门。
学习中遇到挫折不放弃,最后克服的那种喜悦感。
后面可以尝试进行硬件设计:
新手建议使用Altium Designer,教程比较多,国产软件立创EDA也不错,开源的KiCad也可以使用,选一款就行,软件都大同小异,不要在纠结选择哪一款软件上而浪费时间,我个人建议使用Altium Designer,下面简称AD;
网上有很多免费的教程,可以去搜一下,看完教程一定要自己尝试着设计一个电路,可以简单一点,设计一个单片机的最小系统。


http://picx.zhimg.com/v2-e8cf8a50c034ddd04285b40aacde2d4e_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-88b070aa216e7a34ae22413c9d97593c_r.jpg?source=1940ef5c
链接:https://pan.baidu.com/s/1yKfsttgIBeKKMK65m9H91g
提取码:pzsz
如果继续学习,后面会涉及到的内容会比较杂,下面是我自己整理的一个思维导图。

http://picx.zhimg.com/v2-c0a6e7a35c1b4efeaaf4ca5433deead4_r.jpg?source=1940ef5c
贴这张图的目的是什么呢?只是想说明和单片机相关的技术会涉及到很多东西,不同的项目,不同的领域,会涉及到不同的知识点,学海无涯苦作舟。
所以着眼点应该是加强基础知识的提高,及时归纳总结,这样技术就能慢慢积累和提高。
基础编程

[*]C语言必须精通,但绝非一朝一夕的事情,需要大量时间去实践,去写代码,去调试,去做项目,同时还得学习理论,通过实践加深理解,推荐书籍《C 和指针》,《C 陷阱与缺陷》等;
[*]语言只是工具,学会了C语言,你已经知道如何砌砖了,但是如何把楼盖高,盖牢,盖的好看呢?
这时候,就需要学习数据结构,算法和设计模式,这里推荐《算法导论》,《代码大全》都不错,也是经典了,而且这两本书也会长期陪伴着你;
[*]再到后面,发现裸机编程已经很难满足学习欲望了,这时候可能会学习实时系统了,FreeRTOS,RTThread,都是十分优秀的项目;
慢慢地学会读这些项目的源码,读优秀项目的源码,这是提高很快的途径;
这时候,还不够,操作系统,微机原理(EE)/计算机组成原理(CS),这些书可以操作起来了;
后来还可能会接触到Linux,这是个庞然大物,每一个方向深入下去都需要花大量的时间和精力,LKD,LDD,ULK,这三本经典的书;当然前提还得学会Linux环境下编程,shell脚本,makefile等等等,内容太多了,我对Linux涉猎不是很深入,如果是做应用的话,AUPE啃一下,一定会受益匪浅的;朝这个路线走,那差不多偏纯软件了。
硬件部分

[*]模拟电子技术和数字电子技术,如果是EE科班都会开设这两门课程的,如果是非科班,零基础,可以自学一下;
推荐麻省理工的公开课《电路与电子学》,教授讲得很好,里面已经涵盖了模电和数电的内容;
[*]原理图设计,能看懂数据手册,根据项目需求进行电子元器件的选型;
前提是,熟悉最基本的电子元器件,阻容,磁珠,MOS管,二极管等等;
另外还有功能元器件也需要了解,运放,数字IC,存储芯片等等;
但是这还远远不够,可能还要板载电源,用LDO,还是DCDC,如果是DCDC还得考虑纹波,噪声等等,不过这好像和单片机又扯远了(通常会有专门电源工程师),如果没有,那你上;
[*]PCB的Layout,需要学习一款EDA软件,Altium designer用的比较多,Pads,开源的KiCad也不错,多用用就熟练了,不懂的多问搜索引擎;
Layout的设计规范可以参考一下华为的设计规范,注意一下板机的EMC,布线,铺铜,接地方式以及回流面积,如果是低速板,相对难度会小一点,硬件的坑很深,甚踩;
最后我想说的是最重要的还是实践,实践,实践,自己做个板子,发出去打样,现在打样还是很便宜了,甚至连SMT都包了,软件靠精力,硬件靠经历,多爬坑,学的就多了,会的也就多了,技术在于积累。
最后就是要多与人交流沟通,不耻下问,这里一定要注意提问的技巧;下面是我认为的几点;

[*]尽量别问搜索引擎能解决的问题;
[*]尽量收集问题相关的信息;

[*]例如单片机而言,你不能问:为什么我的灯点不亮?或者你可以问:我的灯点不亮,测量了IO输出电平正常,但是没有亮?

[*]不要使用难懂、模糊化等词句,尽量简短,清晰,简明,扼要地描述你的问题;
[*]对的时间,问对的人,在别人全神贯注思考或搬砖的时候,就不要轻易打扰他人;
[*]明确你的提问目的是什么,如果你自己都不在自己要问什么,那还是先整理一下问题再问吧;
加入嵌入式技术交流群一起进步​mp.weixin.qq.com/s/yBi_d-Pbs86Zo8-gJDKxLA手动码字,以上都是个人经验,仅代表个人观点,不足之处,请见谅;
如果答案对您有所帮助,请帮忙三连,我是 @小麦大叔,一起交流,一起进步。

hython 发表于 2023-10-4 19:19:43

时间很快,不知不觉从事单片机开发近10年了,对于单片机怎么学这个话题,感慨万千。
单片机在外行人看来门槛很高,既要懂硬件,又要会编程,大多数人还没开始已经吓尿了!
其实,单片机并大家没想的这么难,关键就是方向正确+努力。
下面来讲讲我的自学经历。
曾经我和大多数即将步入社会的学生一样,不知道自己以后该做什么,对未来充满无助和迷茫。
更糟的是,我文凭也不高,连本科都不是,但是抱怨没有用,第一步首先要解决就业的问题。
我的性格是比较内向的那种,所以我选择了编程,最重要的还是那工资看着真香。
但是编程分为很多种,C、C++、java、PHP等等等,选择太多让我无从下手。
一次机缘巧合的机会,让我了解到了单片机,这玩意有意思,因为能通过写程序去控制硬件去完成一些有趣的操作,比如说最经典的点灯,智障小车等等。
或许我是比较喜欢这种”即时反馈”,可以一边学一边做出好玩的东西出来。
然后我就一头扎进学习单片机的道路,越研究发现越艰难,什么电子元器件、数字电路、模拟电路、数学、英语、单片机、C语言、Protel99、原理图一堆东西要学。
现在想想,如果当初我能看到这样一篇指引方向的文章,那该有多么幸运。

Ok,干货正式开始,我将通过以下3点来讲述单片机要怎么学,才不会从入门到放弃。
1. 单片机要学什么?
2. 入门最佳学习路线

一、单片机要学什么?

我们不管学什么,最重要的目的都是奔着赚钱的,这点应该没人反驳吧?
对于单片机来说,前期变现唯一的方式就是去找工作。
有这个思维以后,接下来就好办了,我们直接看企业需求。
我们直接打开招聘平台,然后搜”单片机工程师”、或者”嵌入式工程师”职位。

http://pic1.zhimg.com/50/v2-8117c5cf5f4b558b106929edbcd84f03_720w.jpg?source=1940ef5c

http://pic1.zhimg.com/50/v2-5f4c47f0896d2a150f7064e6c22e19ff_720w.jpg?source=1940ef5c
多看几个职位你就会发现大家的要求都是大同小异,我们只要抓住这些职位的共同要求,这个要求通常就是这个职位的刚需,而这些就是我们要学的。
什么?你还是总结不出来?
没关系,我早想到了!我比这些招聘信息更懂这个职位的需求,继续往下看!
二、入门最佳学习路线

入门学习路线大纲:电子元器件-电路基础-C语言-单片机-AD软件使用
1. 电子元器件
单片机主要是用来控制硬件的,所以基本的电路必须要懂,而电路是由各种电子元器件组成的。
元器件成千上万种,没必要全部学,前期只需要学会电阻、电容、继电器、LED灯、二极管、三极管、MOS管、电感、按键、晶振这些元器件的作用就可以了。
2. 电路基础
关于电路的知识就多了,电路还分模拟电路和数字电路,我入门的时候在这里踩了一个大坑(死磕了一段时间模拟电路),导致我一度想放弃单片机。
其实完全没必要单独去学模拟电路和数字电路,对于单片机开发来说模拟电路用的还是比较少的,即便有也有专门硬件工程师帮你设计成能直接接单片机的信号了。
电路基础只要掌握欧姆定律、三极管开关原理、二极管导通原理、按键检测原理、蜂鸣器驱动、单片机的外围电路就可以了,简单来说学到能看的懂51单片机开发板的电路图就行了。
3. C语言
我在入门的时候C语言和单片机是同步学的,否则单纯去学枯燥无味的代码兴趣很容易被磨灭,学技术最大的动力就是兴趣。
C语言学完结构体和指针那章就可以了,如果指针实在学不懂那也没关系,先了解,当你有一定代码量的沉淀后,再回过头去看就很容易搞懂了。
3. 单片机
目前市面上主流的单片机就是51和STM32,所以这两个单片机是必学的,先学51后学STM32。
51的话全部外设都要学完,而STM32因为比较复杂一点,所以只需要学习常用的外设(GPIO、Timer、中断、USART、IIC、SPI、PWM、DMA、ADC)就可以了,其他像什么CAN、USB的一律不管,工作需要用到的时候再去学。
4. AD软件使用
AD是一个画原理图和PCB的软件,作为单片机软件开发来说只需要会看或者画原理图即可。
以上学习路线所有资料在网上都能搜集到,我这边也整理了一份,要的可以直接找我拿。
三、总结
正确的方向比盲目地努力重要,特别是学技术这种无底洞。
最后聊下很多小伙伴最近问我的一个问题,他说他没有学历,英语数学也不好,专业也不对口能不能学得会单片机和编程,学出来会有人要吗。
其实完全没必要有这个顾虑,记得在17年的时候在公司里带了一个之前在工厂做电路板维修的学徒,他也才初中毕业,因为他人还不错,就带着他学了9个多月,后面他跳槽到一家公司做研发,拿13K一个月,原来做维修才6K多。
所以,学历和数学、英语或许会决定你的天花板,而不是限制你进入这个行业的门槛。
玩到后期,想通过这个行业赚到大钱,拼的绝对不是技术,而是你的思维认知,你的人脉,你的资源。
最后彩蛋时间,最近有同学跟我要单片机的资料,我特意花一个月时间,总结了我10年产品研发经验,收集了这份史上最良心、最硬核、最实用的「单片机入门到高级教程+工具包+22个热门项目」,无偿分享给大家。


http://picx.zhimg.com/v2-657596598fee18328e8945c8e78ef474_r.jpg?source=1940ef5c

资料包几乎覆盖了C语言、单片机、模电数电、原理图和PCB设计、单片机高级编程等等,非常适合初学者入门和进阶。

除此以外,再含泪分享我压箱底的22个热门开源项目,包含源码+原理图+PCB+说明文档,让你迅速进阶成高手!


http://pic1.zhimg.com/v2-e1e73d5e64e66ddaddf640db1d199d79_r.jpg?source=1940ef5c

据说有小伙伴靠这份顺利入职BAT,所以一定要保存起来好好学习!

后期我也会组建一些技术交流群,让大家能认识更多的大佬,有个好的圈子,你对行业的认知将在最前沿。

大家想要上面「单片机入门到高级教程工具包 + 进入单片机交流群」,可以点击下方⬇️的卡片扫码进群免费领取。


或者可以找「无际单片机」,全网同名的。

更多无际原创的个人成长经历、行业经验、技术干货等等,请点击下面链接⬇️

<a href="http://zhuanlan.zhihu.com/p/352944001" data-draft-node="block" data-draft-type="link-card" class="internal">无际单片机:单片机入门到高级开挂学习路径(附教程+工具)电子工程师的能力有多可怕?为什么我学了几天 STM32 感觉一脸茫然?谁能教教我怎么学单片机,先学什么,怎么入门?Stm32学了好久了,感觉独立做项目还是有力不从心的感觉?无际单片机:单片机怎么实现模块化编程?思维+实例+系统教程(实用程度令人发指)无际单片机:c语言回调函数的使用及实际作用详解无际单片机:手把手教你c语言队列实现代码,通俗易懂超详细!无际单片机:新手学习单片机最常见的六大误区,你进坑了吗?


http://pic1.zhimg.com/v2-634275ef3ed3ba3f64535603d065a0c3_r.jpg?source=1940ef5c

eking 发表于 2023-10-4 19:20:02

http://picx.zhimg.com/v2-4883fc06399d6ce67b3acfb7c0794527_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-79c6ce8fec40a1e27c86293919d5adac_r.jpg?source=1940ef5c

http://pica.zhimg.com/v2-6b4c1ef26fa3796fb8b39023be3403ff_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-bc3ec00108f31ef36f625c74db745bc4_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-70a8ba61d4cad641a7e9aba30f1c6316_r.jpg?source=1940ef5c

http://picx.zhimg.com/v2-191006f0432cf153c038cbb914b5b654_r.jpg?source=1940ef5c

xzshengli 发表于 2023-10-4 19:20:20

我是从大一就开始接触单片机,学过很多类型的单片机。
从最简单的51单片机(stc,atmel, intel等类型都用过)
到国内现在最火的stm32(推荐正点原子,后期很多项目都是用的32,因为资料比较多,开发比较快)
还有飞思卡尔(这个是做智能车用的,现在叫恩智浦,在汽车领域很多都是他们的单片机)
还有瑞萨单片机(日本的,赞助了电赛所以就学了,在汽车领域用的较多)
还有很多包括msp430也用过(老师交代的项目要求使用,特点是内部功耗管理很厉害,也就是低功耗很强)
pic单片机(这个是我们正儿八经开的专业课,因为是实验班,还需要做课设,我做的是无线室内温湿度采集显示装置,很简单了,不错做的很漂亮)
后边就是arm9,arm11,到linux之后就不太关心使用的是什么芯片了,因为实际工作中项目很复杂,软硬件被分工的很厉害,我很早就希望成为软件工程师,所以后期有所侧重。
但是了解硬件还是必须的(可以更快的定位问题),比如做无人机的时候使用的stm32f4系列的一款芯片,我主要是写飞控算法实现的代码,硬件都是其他同事设计的,但是我很喜欢跟他们探讨硬件问题,这有助于我解决很多问题。
后边工作与硬件芯片就更远了,工作了甚至都没有见过设备,更别说内部的芯片了,现在使用的应该是博通的芯片(美国一家全球领先的有线和无线通信半导体公司),提供我们软件工具链甚至开发算法支持,使用的Linux系统,软加开发基本与硬件隔离,但是架构师还是很了解硬件的,并且经常发现硬件部分的错误(可见懂硬件还是必须的)。

说了这么多你可能发现没有说怎么学习单片机,其实三点可以总结出来。
1.实践,这个是最为重要的,可以说搞嵌入式开发,不实践就学不会。
2.C语言编程能力,这个几乎占嵌入式开发80%难度,我大一的时候痴迷硬件设计,以为设计电路,做pcb,抄抄代码就很厉害了,实际呢?也就是自我安慰而已,虽然如此,我还是很喜欢硬件,我做过很多PCB设计(最多做过6层板,柔性板,沉金,邮票孔什么的,是不是听着很熟悉,哈哈)
3.最后一个就是基础,很多业余出身(机械,化学等专业的)都以为看点视频就会开发了,但是实际为什么学的很慢呢(可能也是题主的困扰),原因就是基础不行,包括模数电(我是酷爱模数电,自学了外国的很多教程),电路,软件系统设计,自动控制原理(很多人学不会的PID算法就是这课教的),高级语言编程(降维学习,高级语言在做设计的时候确实有优势),嵌入式系统原理,单片机内核原理,微机原理,高数(这个就不多说了,很多渣渣还想做算法,但是卷积都不知道,机器学习了解一下),列举可能不全,全是印象中的就直接写了。

所以我看见题主说的更快学习,有时候,慢就是快,很多坑都需要后边填(想起汤家凤老师的口头语“基础不牢,地动山摇”)

先这样,以后想起来在补充了。。。

补充下嵌入式Linux学习路线:

Allen李康:ARM+LINUX嵌入式学习路线2023年2月15日20:55:45 更新单片机学习路线

CodeAllen:嵌入式单片机学习路线

gibbet/猫 发表于 2023-10-4 19:20:48

更新于 2021-09-21,规范下文档大纲,之前风格太丑。
本文为本人大学和工作4年期间,学习嵌入式的实际学习过程分享。因为自己走了不少弯路,为方便知友们少走弯路,学习路径相对我实际学习过程略有先后顺序调整,仅供参考。
0. 写在最前

嵌入式学习路径是一个漫长而又有趣的过程,有趣是随着知识的积累感受的成就感,漫长是相对于软件来说,入门还是有一定门槛的。
但一定不要一个人学习,因为上述学习路径长,难度渐渐加深,一个人总有不理解,晦涩难懂的地方,你需要有人来探讨。注意是探讨,不是一味的请教别人,遇到问题自己先通过网络查询资料,先学习和思考,再请教他人。因此强烈建议现实生活中找一两个同样方向的人一起学习,在学校就比较方便了,加个单片机社团就有学习氛围了。
不要一个人学习,学习需要探讨,一个人学习容易放弃,一伙人则会相互激励。
不要一个人学习,学习需要探讨,一个人学习容易放弃,一伙人则会相互激励。
不要一个人学习,学习需要探讨,一个人学习容易放弃,一伙人则会相互激励。
大部分人的主要疑问:哪里可以找到一伙人?

学生党:问问学校电气, 机电学院里面有没有类似的工作室. 可以利用实验室资源最大化学习。
工程师:通过自己买开发板或者打样。交流的途径有:各类技术论坛,stm32这块,可以去正点原子论坛, 野火论坛,也有对应微信公众号,可以找找有没有衍生出的微信群或者QQ群。linux这块,100ask论坛,ZLG开发交流群. 各种交流群, 论坛, 只要用心去找, 一定能找到。
1. 基础课程

1.1 C语言

具体细节的知识点我这里就不详细的展开描述了,毕竟C语言的书和视频教程网上一大堆,学习资源充分。
但这里建议,C语言的基础还是要打扎实的,最简单的方法就是高中对付高考的方法:题海战术。其实就是将C语言书籍后面的C习题,每一题的做一遍,自己动手敲一遍,想一遍,调试一遍。这样将会极大的锻炼到你的基础编码能力。
觉得C语言课本后面的习题太简单没有难度的,可以转战LeetCode。
1.2 数字电路

具体的细节说实话我也不记得了,但是最基本你要知道与或非门如何实现组合逻辑;组合逻辑的输出反馈到输入作为下一次逻辑的输入就构成了时序电路,掌握时序逻辑的分析方法;另外还需掌握数据锁存器类的掉电数据不丢失的电路是什么样的原理。掌握这些概念,或许最开始仅仅是一知半解,没有能将知识串起来,但是等到某一天你的知识体系成熟的时刻,你就豁然开朗了。
个人觉得,学习数电主要是要理解到下面这几个点:

[*]人类文明的进步,探索发现了PN结这种东西具有单向导电性,由此制作做了二极管。(理解PN结单向导电原理)
[*]由于二极管的单向导电性,由此又制作出了与或非门电路。(理解二极管如何构成与或非逻辑门)
人们做出了与或非逻辑后,发现世界上逻辑就是在此基础上复杂化而已。可用通过与或非门实现加法器,移位器,编码器,译码器等各种想要实现的组合逻辑(掌握通过门电路设计组合逻辑的方法)
[*]但现实生活中的逻辑往往不像组合逻辑这么单纯,输入转化为输出就结束了。往往上一次的输出会影响到下一次处理。时序逻辑的出现就这么引入了,同时也带来了时钟的概念。(掌握组合逻辑输出反馈为下一个时钟的输入得到时序电路的分析方法)
[*]上面这些都是实时输出的,即输入的同时才能得到对应的输出,一旦输入没有,输出也就丢了。数据没有办法保存。于是人们又通过门电路制作出了可以锁存数据的RS触发器,PROM存储器。(掌握存储器的电路原理,如何通过总线时序访问)
准确理解了上述内容后,在后续学习微机原理的课程中,你会发现CPU的核心单元就是一个复杂点的时序逻辑,而外设资源的话,都是些组合逻辑或时序逻辑包起来的黑盒子。
1.3 代码托管

Git工具和GitHub使用。将代码保留一份到Github上,方便以后复用。慢慢你会发现,自己整理的代码就是最好的笔记。git教程推荐廖雪峰的git教程,简单易懂。国内的话,可以考虑 gitee。
给点小建议,对于复杂的逻辑,代码笔记中要有必要的注释。代码风格最好做到统一规范,写代码要像雷军一样自信,"我写的代码像诗一样优雅"。代码风格格式化工具,很多编辑器自带代码格式化功能,如 VSCode。也可以使用 CoolFormat 手动进行格式化。
2. 入门课程

2.1 51单片机

讲道理,目前Proteus仿真软件确实很强大,使用它学习51的书籍,教程,示例十分的多,非常适合学习。但我还是建议真心学习的的话,去淘宝上淘个实物开发板和模块,学生党经济能力一般的就上闲鱼,买个二手板子,包邮不超过50。为什么建议买实物呢?因为Proteus仿真毕竟是仿真,对于很多硬件上的电压、信号时序等要求不像实际电路严谨,或者说不够严苛。就好比i2c时序不是很符合从机的要求也能正常通信,但同样的程序放到实物单片机上就很有可能i2c通信不上。
这里再顺带手的介绍下51主要学习些什么?以及简单的学习步骤:

[*]创建工程,学会如何编译,如何下载,理解sbit,sfr等51单片机特有的寄存器数据结构
[*]假设使用的STC系列的单片,要学会去STC官网(http://stcmcu.com)下载官网资料,数据手册文档。官方下载工具、电路参考设计等资料。(从芯片厂商官网上获取学习的资源也是一项很重要的能力),或许51这样的单片机资料太多,基本你想要做的东西,别人早就做过了,官网的资料早就变成千万的人的博客文章,但以后学习一些不是热门的处理器,官网的资料就显得很权威也很重要了。
[*]学习51单片机的IO模块,使用IO点灯(流水灯)、控制数码管、控制8*8点阵模块、按键输入。
[*]学习51单片机的中断模块,先从最简单的外部中断,使用中断的方式识别按键事件。
[*]学习51单片机的定时器模块,实现1s定时,实现简单的数字秒表,实现IO口输出PWM波。
[*]学习51单片机的串口模块,掌握串口电平标准,TTL、RS232、USB电平标准,掌握串口波形组成,掌握波特率,多主机通信等概念
[*]51基础模块学习完了后,就可以学习扩展模块了。可以使用IO口模拟各种各样的低速总线协议,如i2c协议、spi协议还有一些特定模块自定义的协议,如DS18B20温度传感器的单总线协议,加深对协议的理解。学习的过程可以通过买该协议对应的模块进行学习,尽量挑网上教程多的模块买,如i2c就买eeprom和mpu6050,spi就买flash。
[*]学到这里,就可以做点小东西了,比如说旋转LED,循迹小车,遥控小车。最开始就跟着网上的教程学习,学习的第一步总是从模仿开始的。先模仿,再理解,再改进,最后吸收转化为自己的能力。
建议上述过程多花点时间,做到绝大部分地方都能搞懂,都能够理解。毕竟是基础,后面的学习是在其上进行扩展,基础学的好,后面有着触类旁通的功效。
2.2 微机原理(可选)

一般的小伙伴这个时候就会开始上手STM32了,但是我建议在上手STM32之前,先看看8086处理器的设计,即学习下《微机原理》这门课,我觉得还是很有必要的。微机原理,可以大概的了解的,CPU如何执行指令,如何通过地址总线、数据总线、控制总线访问内部寄存器,外部存储器,中断如何被响应,以及中断的具体内部处理过程。
2.3 STM32

接下来可以安安心心的学习STM32了,这个就比51要复杂了。但是不慌,本质和51是一样的东西,只是功能模块变复杂了,模块数量变多了。但是万变不离其宗,本质上模块无非就是组合逻辑或者是时序逻辑电路,而模块寄存器就是该逻辑电路的输入。我们只要看懂模块框图,将框图中的配置和相应的寄存器对应上,学习就是一样的。stm32单片机,推荐购买野火或者正点原子的开发板学习,并非打广告,而是教程确实讲的好。这个跟着视频一个一个模块学习就可以了。或者以作品为导向,做个平衡小车,OLED时钟等小玩意。
2.4 数据结构 & RTOS

裸机程序做完了就可以学学rtos小型的嵌入式操作系统了,野火和正点原子都有出书籍和视频教程的。学习RTOS之前,有需要的同学可以自行考虑下要不要学一下数据结构,不一定要学的很深,最起码队列和栈结构要了解,最好的话自己用c实现一遍。
2.5 PCB 绘制 & DIY 小作品

单片机这种简单的小板子推荐使用国产的 LCEDA。Altium Designer 更专业,但是是收费软件,替代方案为 KiCAD。
STM32 功能模块比较多,如果全部都学的话自然是最好的,但是怕单单是学习慢慢的会觉得无趣(看视频教程、分析源码、自己实现一遍、接着开始下一个知识点也是上述三个步骤),久了怕人会坚持不下来,渐渐的消磨了学习的激情。因此,学习STM32我建议以项目为导向,当然一些基本的GPIO、中断、i2c、LCD、Touch、ADC、TIMER等外设还是要先熟悉的。STM32可以做的东西就多了。大家可以在知乎上或者在各大电子论坛上搜索下有意思的电子小东西,挑自己感兴趣的做。比如说我比较感兴趣的有:1. 可调电子表 2. 自平衡小车 3. 四旋翼飞行器 4. 旋转LED 5. 红外遥控复制器 6. 自制STM32仿真器 7. NES游戏机 等等等。
既然以作品为导向,那自然也就需要自己打板了。打板子的,最近嘉立创在搞活动,真的好便宜呀,5元5片,全国包邮。打板的话,需要学习下 Altium Designer 软件,从此开始制作属于自己的小玩意。AD的资料网上也很多。我是看的郭天祥的AD6.9视频入门的。目前国产的立创 EDA 出了专业版,画画简单的电路板还是没有什么问题的。
DIY 的话,Arduino 也可以考虑,有 C 基础就可以轻松上手。
3. 提高课程(Linux)

单片机学的差不多,就可以开始嵌入式 Linux 学习了,仔细细分的话可以细分为嵌入式 Liunx 驱动开发和嵌入式 Linux 应用开发。
3.1 Ubuntu 入门

安装Ubuntu,学习Linux基础使用,我是看慕课网的Linux达人养成计划系列视频入门的,重点学习下以下内容:

[*]Linux 基本操作,常用命令
[*]Linux C 编程,能够使用 gcc 进行编译
[*]Makefile,推荐陈浩 《跟我一起写 Makefile》
[*]Shell 脚本
[*]感兴趣入门下Python脚本
3.2 Linux 驱动

有了Linux使用基础,开始学习处理器,s3c2440处理器,购买开发板学习,推荐韦东山视频,跟着韦东山走,一期,二期,三期,毕业班视频。
主要的学习内容有:

[*] 裸机驱动,就理解为单片机就好了,性质是一样的,只不过这里不像 51 和 STM32 使用 IDE 进行编译和链接,而是自己使用交叉编译工具配合 Makefile 手动的编译链接。
[*]uboot 入门,学习通用的引导流程,熟悉 uboot cmd,bootcmd,环境变量,flash 烧写等。
[*]kernel 驱动,这里的 kernel 驱动和裸机驱动还是很大区别的,单片机驱动相对来说说仅仅只是看懂 SOC 手册,配置寄存器,但是内核驱动往往为了兼容大量的 SOC 主控,大量的外设厂商,存在一层软件抽象。在内核中,我们称之为子系统。子系统有很多内容,选自己工作相关的仔细研究即可,切勿贪多嚼不烂。
3.3 Linux 驱动移植


[*]rootfs 制作,基于 busybox 制作内核文件系统。
[*]uboot 移植,kernel 移植。
4. 提高课程(软件)

有了一定的嵌入式基础后,后面在实际工作中,你会发现,很多硬件强相关的驱动代码都是由物料供应商提供。举个例子,我之前在上海做手机开发,高通 SOC 方案驱动子系统非常的完整,有高通的一套标准在里面,而对应的手机物料供应商,比如LCD(屏幕)、TP(触摸)、Sensor(摄像头)、指纹、各类传感器,在出售物料的同时,会根据你的 SOC 主控方案直接提供可用的驱动程序(按照高通规则都匹配好了,MTK也是一样),很多硬件驱动代码,供应商全部帮你做好了。我们更多的是开发业务代码。
4.1 数据结构

基本的队列、链表、环形缓冲区这些是基本功了,建议自己实现一遍。不要忘了我之前提到的,自己曾今写过的代码就是最好的笔记。gitee 和 github 记得保留起来。这些代码会经常使用到,在不断的使用中,慢慢的修复缺陷,完善代码的鲁棒性。
4.2 设计模式

推荐 《Head First》,我看的是 Java 语言的版本。可以初步学习下 Java 语法再看。代码设计思想不受语言限制的,好书值得一看。
5. 积累与思考

5.1 知识体系库

慢慢的,当我进入一个细分的领域,音视频开发领域,就会发现,很多时候,不仅仅是熟练通用开发能力,即我上面提到的驱动开发、软件业务开发这些技能。很多业务依赖于你要懂专业知识可能得心应手,不然连代码中的数据结构为什么要如此设计都搞不明白。
因此但进入专业领域,可以尝试慢慢的将平时积累的知识组织起来,慢慢的积累,最开始可能自己也是一知半解,博客抄一抄,官方协议文档翻译翻译。但是知识就是这样的,最开始没有成体系之前,一知半解很正常,一旦到了一定的量,熟悉后,一旦知识串起来后,那种的融汇贯通的感觉是极其美妙的。
因此,建议平时学习的过程中,养成做笔记的好习惯。想要深入研究那一方面后,可以不断的积累学习,进行系统的整理,慢慢的等待融会贯通的那一日到来就可。我目前使用的语雀知识库,私人服务器搭建的是 showdoc 文档库。
5.2 文档规范 & 代码模块化(组件化)

不难发现,很多开源软件都配有详细的文档,从最简单的介绍这个软件是什么,有什么用,该怎么用,到注意事项,都写得一清二楚。甚至有的开源软件还会介绍内部的实现细节。
再参考我之前提到的,自己曾今写过的代码就是最好的笔记,我们可以不断的完善自己曾今写过的代码,慢慢的将独立功能的代码模块单独出来。方便自己以后在不同的项目复用。
复用的话,毕竟好记性不如烂笔头,代码核心思想,一个月两个月还能记得,时间久点别说核心思想了,可能连使用都不太记得怎么用了。这个时候就意识到了,代码配套文档介绍的重要性。毕竟在代码刚开发完成的时候,趁着思路清晰的时候,把文档写掉,注意事项记录的清清楚楚,明明白白后,后面复用将会方便很多。
提供一个我写的代码组件,我写的也不完善,最基本的要求,保证自己以后要用自己看的懂,这个要求讲道理不高吧。
mazcpnt/maz-debugcmd对应文档:
mazcpnt/maz-debugcmd
页: [1]
查看完整版本: 谁能教教我怎么学单片机,先学什么,怎么入门?