【转自】http://blog.sina.com.cn/s/blog_9ed067ad0100yob1.html
许多话你天天听,都听腻了,但它说的确实是对的。“理论联系实际”就是这样一句话。大家都知道它的意思,但真正能做到的人并不多。嵌入式系统的应用性极强,它与实际生产生活相联系的紧密程度超乎想象。学习嵌入式系统,“理论联系实际”是对的,不过这句话把“理论”两个字放在前面,对学习嵌入式系统来说似乎不妥,个人感觉“实践”更重要。
我常把学习嵌入式系统的方法分成4类:
第一种是看教科书学。这是许多在校生学习相关嵌入式课程的一般方法。老师在上面讲,你在下面听,再布置点作业外加几个验证性实验。如果这些都做的很好,通常可以考个高分,但是考完就忘了,真正毕业后去干这一行,还得从头来。大学里这么做有它的合理性,毕竟谁也不知道你毕业后到底要做哪一行,课程那么多,时间和教学资源都有限,不可能每一门课都要求你精而通之。经过这样的学习,可以达到入门级,以后做这一行至少不会发憷了。
第二种是用仿真软件学。有些人学了教科书后开始对嵌入式系统有兴趣了,但是经济实力有限,就用仿真软件模拟嵌入式系统。尤其是代码的软件仿真,更是简单易行。许多嵌入式系统的编程软件本身都有仿真功能,例如Keil,如果你仿真的程序不牵扯硬件,在Keil上直接执行都可以。近几年流行的Proteus EDA软件,可以实现从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计与仿真。Proteus支持8051、PIC、AVR、ARM、8086、MSP430等处理器模型,编译支持IAR、Keil等常用软件。我的理解,“仿真”的意思是“仿佛是真的”,你千万别把它当成是真的,尤其是硬件,嵌入式系统的实际工作环境千变万化,仿真软件很难把各种情况都模拟出来,如果真想从事这个行业,仅靠仿真软件来学习是远远不够的。
第三种是利用商业开发板学习。如果你经济上可以承受,这也是一种很好的学习方法。商业开发板一般都提供详细的硬件电路图和PCB图,完整的源代码,系统的各种功能应有尽有。通过学习,你可以全面掌握所学嵌入式芯片的各种功能,而且有了这个巨人的肩膀,之后想开发实际的产品非常快,好多硬件设计和软件代码都可以直接拿过来用,大大加快了产品的开发和上市时间。不过好的开发板都价格不菲,便宜的其技术水平又值得怀疑,这需要根据个人情况斟酌。
第四种是自己动手制作嵌入式模块学习。对于初学者来说,这有些难度。但任何事情都有它的两面性,自己动手一开始可能很难,但是只要过了第一道坎,后面就是阳光大道,因为你的起点就是产品级的。你学习的各种知识和经验都经过了实践的检验,这些第一手的知识和经验将牢牢扎根于你的大脑中,成为以后漫长行业生涯中可以慢慢享用的财富。自己动手有许多方式,你可以用一个硬纸板做底板自己打眼连线,可以买面包板动手插接线,可以买覆铜底板自己布线腐蚀,当然也可以直接做成PCB拿去厂家加工。自己动手,你会遇到各种各样的情况,常常陷入“山穷水尽疑无路”的困境,但更多的是“柳暗花明又一村”的畅快。
无论哪种方法,学习的态度都应该是开放的,尤其是前人的经验和教训要概括吸收,要擅于站在巨人的肩膀上。无论如何,只要有兴趣,只要抱定一颗坚定的心,结合适当的方法,你就会成为嵌入式系统行业的专家,实现自己的人生价值,并获得丰厚的回报。
1、网上51单片机开发板成千上百种,但是种种不离其宗,无外乎多样的外设、精美的外观,然而实际用途差不多,都是入门51单片机。在这里不建议购买开发板,可以自己看懂单片机最小系统后动手做一个,无外乎复位、电源、下载(一般串口)电路。这样既可以提升动手能力,还可以为自己准备一些电子工具,为日后设计开发铺路,还可以熟悉电子元器件的型号、参数等。做好之后,编程调试仿真也可以提升编程能力。
2、先学好单片机,再学STM32,如果两样一起学,可能会花去很多时间,并且收获甚微。学习过程要专一,你觉得你能驾驭单片机了就接触STM32,毕竟ARM系列的就要学习嵌入式了,裸跑就当做单片机用,没体现优势来。
3、51单片机也好,STM32(Cortex-M3)也罢,现在Proteus最新版支持Cortex-M3了,所以你都很有必要安装Proteus+keil 4了,不用购买硬件设备就可以利用PC平台学习单片机等的电路、程序开发设计以及仿真调试等。
希望帮到你。
1、你先做个最小系统试试,等你做完了就懂了。你要学习其他外设的通信、控制,那就得再接着买外设,然后外设的问题又来了,你要自己做外设呢,还是买现成的模块呢?自己做吧,测试模块的正确运行就好很久了,买现成的吧,玩一两次就扔一边了。照我说的的,你先做个最小系统、以及一排led八个等。 2、但是仿真就不一样了,你爱设计什么模块就在Proteus上设计就可以了,其实弄懂单片机和外设之间的控制原理才是最重要的,编程才是重要的,你懂了原理,爱做什么就做什么。
51单片机核心, 采用8bit, CISC架构, 来自INTEL.
STM32核心, 采用32bit, RISC架构, 来自ARM.
=================================================================
知乎上的一个问答:https://www.zhihu.com/question/22684212
先说一下我个人的能力背景
============
PHP开发多年,了解C语言,《C Primer Plus》认真的看完了,比较短的C语言代码能够读完并理解,没有用C写过成品。汇编不会,学了十来天的51单片机,郭天祥的书,中断部分看完第一种中断了。自己能用C写一个计时器,几个小时内基本上没有误差,没试过更长的。
说一下我学单片机的原因
============
个人兴趣,希望能做一些好玩的东西,例如自平衡的小车或者飞行器,能拍摄,无线传输,能通过红外线或者超声波之类的东西感应地形,wifi定位之类的功能。
我的疑问
============
我在一个电子方面的群里,一个前辈对我说现在51已经落后了,建议我从STM32开始,成本相差不多但是性能却高了很多。我不知道前辈这么说的对不对,不知道大家的意见呢?
额外的疑问
============
1.如果要是学STM32的话,有什么好的板子或者教程推荐么?
2.我对数电模电什么的都不了解,如果要达到自己画板,找人做PCB(是这样吧?我是听说的PCB要找人做),然后焊原件,编程实现功能的话,都需要学什么内容,有什么书推荐么?(我最近在看《编码》感觉这书很不错,不知道看完它的话,能不能算入个门?)
3.不知道达到我2.里面说的那样的水平的话,通常来讲要多久?如果达到这样的水平的话,大概的收入是什么样子的?因为真心觉得这东西好玩,要是能收入也可以和现在相比的话,等熟练了之后弄不好会考虑转行的。
==============================
一个前辈对我说现在51已经落后了,建议我从STM32开始,成本相差不多但是性能却高了很多。我不知道前辈这么说的对不对,不知道大家的意见呢?先来一颗定心丸“ 不管51有没有落后,学习51都是值得的,个人认为不会浪费你的时间和精力”,理由如下:
- 从外设上面看,都是类似或者一样的。 通讯方面的I²C/SPI/UART、模数AD/DA、Timer/Interrupt/PWM/DMA/USB/Ethnet/I²S/Can/PulseCounter等。这些东西在增强型51上面大部分都有(请自行搜索我们熟知的“伟大的”STC芯片Datasheet),STM32自然也有(同样,自行搜索一个STM32F103系列芯片的Datasheet,下面有附图1), STM32上面的这些集成外设有可能功能较为强大,但是简单些的51外设学起来会更快(门槛较低嘛),同时学东西本来就是循序渐进的,对比51的外设操作STM32/ARM的无非就是多几个寄存器和功能而已,例如有可能有脉冲累加器PulseCounter还有脉冲捕捉功能。51简单,学习51恰恰可以让初学者快速上手,这个对于初学者才是关键。
- 从学习编码的角度来看。ST公司给STM32提供了库,因此,我们我们可以很方便的来设置一个寄存器和操作外设,当然也可以不使用库自己手动读写寄存器,此时就和51一样了。
- 成本。学习成本和金钱成本。金钱成本:没错对于个人而言,买片低端的STM32和增强型的51芯片价格差不多。但是既然你已经有了51的学习板子和资料(我猜),那么就先好好使用它学完基础再说吧。对于企业开发产品而言,价格的决定因素太多,不做评价。学习成本:同样是中国特色和谐版的Keil/MDK/Gcc软件上面有什么区别呢?下载同样可以使用串口ISP,有什么区别呢?但是STM32可以使用同样是中国特色的和谐版Jlink来调试却远比一次次的串口下载看效果来得有效。当然51也有对应的调试器,但是我们一般不会去买。
1.如果要是学STM32的话,有什么好的板子或者教程推荐么?STM32硬件有什么太多区别嘛?贵点的就多个什么NorFlash、网卡等外设外,没有什么区别。管它什么神舟几号、安富莱、野火、百为、奋斗…… 按需(外设什么的)选择吧。 提供的教程和配套程序很关键:我做毕设的时候买了个特贵的STM32板子,然后我需要用高版本的μCGUI/emWin,结果就是我自己移植了μCOSII和μCGUI,没错,STM32的东东大多类似,但是如果你赶时间,那就不一样了。
2.我对数电模电什么的都不了解,如果要达到自己画板,找人做PCB(是这样吧?我是听说的PCB要找人做),然后焊原件,编程实现功能的话,都需要学什么内容,有什么书推荐么?(我最近在看《编码》感觉这书很不错,不知道看完它的话,能不能算入个门?)
- 数电模电:那个郭天祥的视频教程里面,会讲AD/DA,译码器什么的,算是无痛入门。因此学到那些地方的时候看看数电模电对应的章节就够了。刚刚翻了下以前买的但是没有看过的《编码》,觉得足够了。遇到没有学过的东西再看数电模电吧。如果觉得大学的数电模电看得不舒服,那就买本专科院校的数电模电书,肯定管用,哈哈。
- PCB:顺手将郭天祥/于振南的Altium Designer PCB设计的视频也下载了吧,跟着他学会很快入门的,当然郭同学讲得很细致因此特别慢,其中某些地方,郭天祥也是现学现用,比较有意思。想来我还是得感谢他。陪我度过的大学低年级。
- 焊东西:这个我真的没有什么可以教的,优酷视频什么的,杜洋应该最擅长这类的教学,哈哈希望他不会介意我这么说。搜一搜吧。看来除了要感谢我的实验室老师和学长外,还应该感谢杜洋。
3.不知道达到我2.里面说的那样的水平的话,通常来讲要多久?如果达到这样的水平的话,大概的收入是什么样子的?因为真心觉得这东西好玩,要是能收入也可以和现在相比的话,等熟练了之后弄不好会考虑转行的。时间:我觉得很快(原谅我打太极),也许就是一个学期的时间,也许是2个月,也许是1个月或者一年,我不知道。这个需要看你在这方面可以付出的时间有多少。但是当你决定学下去的时候,就很快了。就做个飞控什么的而已很快的,网上可以参考的太多了。 收入:不知道。我学自动化的,按理就是搞控制的,但是似乎大些/好些的控制公司只要研究僧,我无名小菜末流本科生似乎难以进去。当然这个和我没有学好现代控制理论/最优解之类的专业课有极大关系。因此如果仅仅会简单的PID的话,我真的不知道,这个只能看情况,学长让我去他们工控公司给的较多,但是我没有去。想来还得感谢学长。或许有一款查工资的软件可以帮助你。 最后,祝你玩得开心,学得开心。 对啦,学习STM32的时候,如果没有基础的话,不要买《STM32权威指南》。不管有没有基础也不要买那些照抄STM32库的书籍。