先学习51,学习c语言,先入门,在用到什么,学什么
下面的建议假设题主有一定C语言的基础。
初步确定学习目标:是学习简单便宜的51呢,还是学习简单但是性价比已经不算太高的,但是功能强大稳定可靠的avr,还是物美价廉的stm32,或者ARM9(可以跑系统了),再往上x86什么的
如果是学8位的单片机,推荐一款仿真软件proteus,支持的芯片很多比如atmel的最新版本是8.2,但是破解不大完全,不需要买硬件,写好的程序可以直接在电脑上运行,还可以与keil联调,推荐版本7.9或者7.8
可以先学51,51是单片机的鼻祖,图书馆找本51的基础书来看,挑那种薄薄的,带有较多的例子的,花个一两天的时间看一下,然后按照书上的写个点亮LED,尝试写下串口,中断的程序,驱动一下数码管之类的(当然程序在proteus下都可以直接运行的)。如果想深入51,后面可以忽略。
也可以先学AVR(我们做航模飞控很多就是用的额Avr,现在atmega系列的48比较便宜才5块钱一片)(感谢@刘杨的提醒,avr不知有atmega还有atiny和at90)。avr与51的区别不多说,学习前期可以借助仿真软件proteus,然后照着书上的例子写一些程序。中间datasheet很重要,前期可以看中文,但是一定要养成看英文datasheet的习惯。如果想继续停在avr上,那就可以尝试移植硬实时操作系统ucos等,这里推荐一本书《深入浅出avr》,里面的例子讲的挺简单的
学习8位单片机之后,学习ARM相对会容易很多(也可以直接上arm,本人不反对,但是我确实看到很多上我们学校的tm4c123g(一款TI的do板)的课,因为零基础而听不懂的),然后可以学习STM32了
学习stm32就好,社区资料,代码,开发板和参考书很多,有一本《单片机与嵌入式系统应用》杂志和微信公号关注一下
先从简单的入手吧,比如先用shineblink开发板入门。
买本实战性强一点的书,边看边跟着书本实战。然后再选个视频进行进一步验证自己了解的知识并从中学习到别人的理解,从而进一步的了解对单片机的认知,接着就是自己买点电子元器件进行自由发挥了,几个小东西做下来后,接下来就是有机会做项目提升了
最有效的学习方法就是先从51开始,基本上现在学校都是以这个为基础教学。可以找到很多关于51的书籍,资源,学习板。挑选合适自己的书和学习板,边看书边按照书上说的做实验,等熟练了以后就可以开始开发一些小项目。慢慢地越来越熟练了。
单片机怎么学习?给你分享一些单片机学习上的建议,希望对你有帮助。
学单片机如果想要快速入门,不建议看书。之所以不推荐书籍教材有以下原因:
1.书上一般会有很多理论知识,但在缺少实践的情况下,初学者会不太好理解。
2.书本教材通常不针对某一特定的单片机电路,所以书籍所带例子程序和你自己买来的单片机是不兼容的,至少得修改管脚定义什么的,增加了初学者学习成本。
3.看书太慢。我看视频4、5天就可以开始进行开发了,你看书可能第一二章都还没看完。
4.看书枯燥啊,但你看着视频教程然后自己再做一遍,达到想要的效果的时候是很有成就感的,学习成为了一种乐趣。
既然不看书,那么如何学习单片机呢?
1.你首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
2.先看内核8051的单片机,到网上买一个开发板,价格不会超过200元。
3.看一下单片机功能:包换内部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4.编译环境、编程软件KEIL。
5.打开开发板的例子程序,在KEIL编译,下载到板,看结果和说明是不是相符,达到这样效果时,你心里肯定很秀激动,这时你真正学会了单片机,你成功了!
6.然后再学会看电路图,电路图其实很简单,就是一根线从一个地方连接到另一个地方,你写代码时,只记住单片机是哪一个管脚,然后对它写代码即可。
我好也想学
要学习并入门单片机编程,首先C语言编程要有一定的基础,学习C语言开始的话可以在vc、vs这些上位机编译平台编写小程序功能自己练习,对c语言有了一定的基础之后,就可以开始单片机之路了,学习单片机要结合硬件才行。如果是单片机初学,我建议先学八位单片机,直接跳过十六位,然后学习三十二位单片机,具体的对应就是先学51单片机,然后学习stm32,最好买个开发板,对照开发板例程编写调试,不断练习实践,才能提高单片机编程能力和水平。对于单片机刚入门,51就选一款stc单片机,这是经典入门的51八位单片机,stm32就选stm32f1系列单片机就可以,在硬件板子上参考例程代码编写程序下载到开发板运行,可以直接看到效果,也可以用仿真器一步一步执行程序,打断点运行,看看程序的每一步执行结果。现在的单片机开发板例程也很全面、丰富,如果是初学,先从第一个例子学起,点灯,然后学习外设操作,比如串口、SPI、IIC、SD卡、操作液晶屏显示等。学习单片机最主要的就是实际上手操作,在开发板上练习编程,能直观的观察现象,提高学习的兴趣。
写好c语言再来学单片机
因为这个问题很简短,所以我也不算长篇大论说如何学好单片机,而且其他的楼主也回答的很好,那我就从别的角度回答一下吧,首先问自己为什么要学习单片机?是你的专业?是为了工作?是为了爱好?如果是为了爱好这个是让自己学习的最强的动力所在,如果是为了工作,为了工资能提高动力也会有但是没有因为爱好强,所以是为了爱好我觉得你也不会提这个问题,因为如果是爱好者早已经从网上别的地方找到了答案,所以我只想说,怎么学好单片机?先问清楚为什么要学习单片机,如果是爱好或者是为了转行加工资,那么网上查找一些学习资料付出时间学习一定会有收获的,所以如何学习单片机?那就是付出自己的精力和专注力。
牛,洗衣机冰箱都离不开单片机原理
首先问你,学习单片机干啥?如果没有目标,就没有动力,效果就差。
我最初是要测试产品上7、8个参数,手工效率太低,手头有PLC,就自学PLC,做了一套设备,后来接触了单片机,就又自学单片机,做了一套全自动化的设备。
因为目标单一,不想系统地学c,见效慢,以前学过一点汇编,就用汇编了。
每个人的环境、条件不同,我这是个特例。
努力学习
:
简单的说说我的看法:
第一有这方面的性趣爱好才有学习的动力。
第二要有逻辑思维能力,数学,物理不及格的就算了吧。
第三能静下心来独立思考,自己解决学习中遇到的问题才能加强记忆。
第四多实践,多动手,少用仿真软件,把时间用到实处。
第五看教程,查关方手册解决问题。
以自己的经历来回答这个话题。
第一阶段,初识单片机阶段。
我大概是07年大二的时候接触单片机。当时学的是51单片机,没有开发版,单纯通过课本学习,最多实验课的时候写几行代码。记得最经典的就是写跑马灯程序。当时写好了,就好多同学来抄我的代码。后来做毕业设计的时候选择了PIC单片机实现时分秒的一个倒计时功能。完全自己自学PIC单片机汇编。由于没有开发版,代码全在本子上写,写完了跑到学校机房,再把代码敲到毕业论文里面。由于是专科,要求不高,不需要做实物。
第二阶段,单片机知识学习初阶段。
08年大学毕业,一直想干技术,干专业相关工作。终于在09年八月份换到了一家报警器公司,从事电子助理工程师的岗位。拿到这个offer的时候甭提多高兴。面试完后,就把这个喜讯告诉家里。虽然当时工资只有1700/月。但是想到能从事技术相关工作,很高兴很满足。一进公司只要一有时间就在那学习,看资料,敲代码,调代码。每天晚上只要没事,就在公司加班,学习。通过一个多月的学习。自己学会了PIC16系列单片机的汇编。用产品的板子实现简单的功能,期间还驱动了一个LCD点阵屏。干了一年,带我的师傅离职。我和另外一个工程师顺利接替他的工作。他负责制定算法,我负责代码实现他的算法,并进行实验,验证。经过一年时间,我们的三个产品差点拿到美国UL认证(还有几项实验未过,只要这几项实验,就可以拿到UL认证。这个是当时第一次快要过UL认证的产品,对于公司来说意义比较重大)。因为这事我就找总经理谈工资,要求涨1000。总经理说加500吧。我说我要1000。我同学他们公司招人,如果涨1000我就不去。我其实挺想留在这里的。后来老板问我干啥了,我说那几个快过认证的产品代码是我写的。总经理听说这个,立马就同意了。在这家公司干了三年,感觉自己也有点技术了(会对单片机算是有一定了解了,也会画PCB),就南下深圳想找一份工资五千的工作。
第三阶段,技术沉淀阶段
12年7、8月份的时候在深圳人才大市场,应聘了温州一家汽车电子软件开发工程师的工作。就这样又来到了浙江。在这家公司做过项目经理、硬件工程师。最后因为通用汽车的空调项目缺软件工程师。这样在14年年初的时候,有做回了软件工程师。主要负责汽车诊断、网络管理、通信、信息安全等相关功能的开发。单片机也从16位到32位。职位从项目经理、硬件开发组长、软件开发组长、软件开发科长。工资也从每个月4200/月,干到最后18000/月。在这家公司干了六年。18年自己有了换工作的想法。由于在温州这家公司做了六年,感觉技术学地差不多了,没啥提升空间了。另外自己也想提升下外语,想去外企,看看国际性公司是如何做开发的,想学点更先进的技术。于是就更新自己的简历。这个时候就接到不少猎头的电话,在18年7月份顺利进入一家外企。当然工资也涨了很多。
第四阶段:技术升华阶段
18年7月份由猎头推荐进入目前这家公司。主要做信息安全软件开发、诊断功能开发、bootloader功能开发、等软件开发(做的比价杂)。这些功能主要是几乎都是纯软件,与单片机的底层关联不是特别大。需要熟悉一些国际标准,比如开发诊断需要熟悉ISO14229,ISO15765,ISO11898(CAN通信底层)等等,信息安全需要熟悉的标准就更多了,比如AES加密/解密算法、AES-CMAC算法,hash算法,HMAC算法,RSA算法,ECC算法,证书相关标准,以太网传输层安全相关标准。在这家公司,作为一个专科生,周围同事几乎都是本科生,而且好多重点大学的同事,同样不乏海外留学回来的同事,对自己的工作和薪资还是很满意。当然也有也有不满的,就是工作强度比较大,工作压力比较大,自己的职位一直没变化,还是一线软件开发工程师。对于目前现阶段,对自己往后的发展也有点迷茫,是继续往技术走,还是技术+管理。
需要一定的基础,还要有兴趣爱好才行的。
我02年学单片机,从51开始的,后来学arm从arm架构开始的,废了老鼻子劲也一知半解,后来干脆看例程,觉得非常简单,就这样我直接就开始编飞利浦lpc程序了,再后来用任何单片机也不去看架构了,包括avrmicrochipadsp,arm系列三星恩智浦atmelstm32等太多了。直接从例程开始用到哪里就学习哪里我认为是一种快速的方法,硬件底层就那么回事一遍写好了就可以不用看了。
总之我觉得从例程开始是最好的办法,通过这种方法我还学了Java,编了很多用于测试升级的安卓APP,还学了Python用于远程收集数据下载生产。等等还学了很多其他编,但C最熟也是我混饭吃的本钱。
1.VerilogHDL描述
可综合电路VerilogHDL语言是对已知硬件电路的文本描述。所以编写前:
对所需实现的硬件电路“胸有成竹”;牢记可综合VerilogHDL与电路结构一一对应的关系;确认电路指标是什么:性能?面积?硬件思维方式,代码不再是一行行的代码而是一块一块的硬件模块;
达到以上几点,就可以写出行云流水般的高质量代码。关于代码与硬件电路的对应关系,参见如下图片,引用自Synopsys官方文档和几本参考书:
2、自动化生成代码如果一定要有奇淫技巧的话,那么代码自动化生成技术就一定可以配得上这个称号。
近十年来,数字集成电路规模和复杂度飞速提高。这给数字集成电路工程师带来了不仅是脑力上的劳动的增加,更多是体力重复性工作的增多。传统的手工代码的编写存在很多弊端。
首先对于模块的代码工程师,要面对许多设计文件。而这些文件之间可能相互不一致,给代码的编写带来了很多的困扰。
其次,代码工程师需要将这些文件中的很多设计信息体现在代码中,其中一些信息是重复性的誊写。这不仅带来了很多枯燥复杂的工作量而且人工参与过多也容易引入很多粗心带来的错误。
再次,由于各个模块连接信号之多导致信号文件的手写工作量很大。每个信号文件小则几千行大则上万行信息。而且一旦有信号连接的变动需要相应修改多个模块的信号文件。
最后,如果设计文件改动相应的设计文件很容易出现哪几处忘记改动的问题。
而Perl脚本语言又有着强大的处理文本的能力。将脚本语言应用于数字电路设计中,作为设计文档和EDA工具的黏合剂,能够大大增加设计的速度。
具体方法为:使用脚本语言从设计文档中提取有用的信息来生成想要的VerilogHDL代码,从而大大减少了IC设计者的工作量,并提高了代码的质量。其好处有:(1)很好的设计一致性:保证了设计概念一旦变动即设计文档稍加修改,对应的VerilogHDL代码就会相应的改变,不需要工程师手动改变代码。(2)兼容性强:该自动生成代码工具中设置了一个配置文件,供设计工程师的配置修改。对于不同的项目,通过修改配置该文件可以直接是代码相应变化,有一定的灵活性。此外,该自动生成代码工具已经应用于两个以上项目中,实践证明有很好的兼容性。(3)代码维护方便:对于设计代码的更新或升级,只需要重新运行下该工具即可,不需要一点点该写代码。(4)使用简单:将很多脚本集成在一起,使用工具时只需要运行一条命令即可。本文将举一个Perl语言在代码自动生成中的应用实例,下图为一SoC芯片中全芯片的时钟控制电路框图:
时钟控制模块实现配置PLL参数、选择输出时钟源、时钟分频、时钟门控、bank切换、输出时钟等功能。3G、4G是系统通讯单元,向时钟控制单元申请时钟。PLLs是时钟源,是时钟控制单元的输入。时钟控制单元有七大主要模块,分别为时钟源控制模块、bank切换模块、分频模块、时钟门控模块、多路选择器模块、寄存器、3G4G时钟握手模块。时钟源控制模块控制时钟源的大小、开关。bank切换模块使时钟控制单元能正常工作在不同的电压下。
时钟控制单元的的工作机理如下:首先,外部模块向时钟控制单元请求时钟,并修改并写寄存器状态;时钟源控制单元根据寄存器中的内容配置时钟源Plls,并提供了所有的时钟源。然后,分频器完成这些时钟源预分频的操作,并将其作为多路选择器的时钟源。而多路选择器则从输入的时钟源中选择输出主时钟。主时钟通过分频模块产生所有的分频使能信号,这个过程中,需根据寄存器所配置的分频数来输出不同的频率的时钟。同时,根据系统的实时需求,通过由SPCU控制的bank选择器完成门控时钟的实现,降低系统的功耗。
以上是时钟控制模块的功能分析,那么如何通过代码自动生成技术来实现呢?(1)首先,我们把这些模块梳理下,形成一个自顶向下的层次结构,如下图。如图中所示,顶层模块完成对底层模块的连接,底层模块实现时钟控制单元的功能。
针对代码自动生成问题,对于顶层模块来说,承担的功能是自动地将底层数十个模块连接起来。对于底层模块来说,需要根据不同的功能定制需求,来自动化地生成所有功能性的代码,然后被顶层调用和连接。这样的话,就存在两个问题:[1]自动生成顶层模块?[2]自动生成底层模块?
(2)顶层模块:通常来说,对于一个复杂的SoC芯片,会有万数量级的信号需要进行匹配和连接。而能够自动生成的信号文件中的信号连接有两个特点:一是信号命令规律性强二是信号的连接关系可以从设计文件中体现。满足了这两点,便可以实现信号文件的自动化。
(3)底层模块此处即可体现Perl脚本强大的数据处理功能,针对该问题,将脚本划分为三类:提取脚本、生成脚本和集成脚本三种。提取脚本用来从输入文件中提取有用的设计信息到存储单元中;生成脚本从存储单元获得有用信息来生成各个功能模块的代码;集成脚本将所有的脚本集成在一个脚本里,方便统一化使用。以下是代码生成的脚本流程图:
如图所示,输入的文件都是excel和文本形式,Perl脚本首先读取技术文档,从中解析出时钟模块所需的连接、频率、时钟域等信息,基于此信息建立一个数据库。然后,根据实际芯片的具体需求,即配置文件,生成相应的自动化控制模式和需求。最终,依据配置文件和数据库,完成所有所需verilog代码的生成。需要注意的是,并不是所有的代码都可以自动生成,有些结构特殊的电路,只能通过手工编写来完成。所以,自动编写通常完成较为规整的、有规律性的代码,手工书写作为补充。这样即可保证得到高质量的代码。