打印
[微控制器/MCU]

单片机开发500问!不断更新中.....

[复制链接]
8856|48
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Massif123|  楼主 | 2010-1-15 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机是未来电子产品必不可少的器件,所以这里准备做个大工程,通过搜集和个人经验编写一个单片机开发500问,大家也可以跟帖,问题编号接龙下去,相信对更多人是个很好的资料!欢迎大家接龙啊。

下面是500问
1、ARM Cortex-M3内核支持什么操作系统啊?比如能支持VxWorks操作系统吗?
答: Cortex-M3内核设计了一个时钟节拍定时器SYSTICK,专为操作系统设计。 但是这只是一个内核,每个厂商的芯片都有不同,能否支持VxWorks你需要看看VxWorks对芯片的要求,比如是否需要内存管理单元等,然后再看看MCU是否具备这些条件。 注意TI Cortex-M3是没有内存管理单元的。

2、C语言和汇编语言在开发单片机时各有哪些优缺点?
答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。
对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。

3.搞单片机开发,一定要会C吗?
答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。
而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明
显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。

4.当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?
答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。

5.学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。怎么办?
答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。做什么事情都有个经验的积累过程,循序渐进。

相关帖子

沙发
nxponline| | 2010-1-15 21:55 | 只看该作者
好想法,鼓励一下!继续!力争成为本区最热贴

使用特权

评论回复
板凳
亦正亦邪| | 2010-1-16 18:45 | 只看该作者
楼主真有心,我会关注的

使用特权

评论回复
地板
gongtengxinyi| | 2010-1-16 19:07 | 只看该作者
支持楼主!!

使用特权

评论回复
5
米其林r| | 2010-1-16 19:22 | 只看该作者
500问呢,这才5问啊,等待完全篇!

使用特权

评论回复
6
亦正亦邪| | 2010-1-16 22:27 | 只看该作者
是啊,连载的有点慢啊

使用特权

评论回复
7
6019实验室| | 2010-1-17 10:46 | 只看该作者
期待其它几问!

使用特权

评论回复
8
Massif123|  楼主 | 2010-1-17 23:25 | 只看该作者
6.学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。怎么办?答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。做什么事情都有个经验的积累过程,循序渐进。
7.请问作为学生,如何学好单片机?
答:学习好单片机,最主要的是实践,在实践中增长经验。在校学生的话,实践机会的确会比较少,但是有机会的话,可以毕业实习选择相关的课题,这样就可以接触到实际的项目。而且如果单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。有能力的话,可以找一些相关兼职工作做做,会更有帮助。而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,可以到电子市场去买一些小零件,自己搭一个小系统让它工作起来。

8.如何才能才为单片机的高手啊?
答:要成为单片机高手,应该多实践,时常关注单片机的发展趋势;经常上一些相关网站,从那里可以找到许多有用的资料。

9. 女性是否适合单片机软件编程这个行业?
答:要根据自己的兴趣,配合自己对软件编程的耐性,**皆适合这个行业。

10. 8位机还能延续多久!

答:以现在MCU产品主力还是在8位领域,主要应用于汽车应用、消费性电子、电脑及PC周边、电信与通讯、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主, 并以量大低单价为产品主流,但是32位ARM内核的MCU增长非常快,据说2008、2009均保持了100%的增长率,这和ARM公司的生态系统建设不无关系,据ARM内部人士透露,到2012年,ARM内核MCU会占到MCU整体市场的20%左右,这将是非常大的市场,数量上会达到20到30亿颗的规模。

使用特权

评论回复
9
Massif123|  楼主 | 2010-1-17 23:29 | 只看该作者
11. 学习ARM及嵌入式系统是否比学习其它一般单片机更有使用前景?对于一个初学者应当具备哪些相关知识?

答:一般在8位单片机与ARM方面的嵌入式系统是有层次上的差别,ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位单片机因架构简单,硬件资源相对较少,适用于一般的工业控制、消费性家电等等。而初学者应当具备软件编程相关知识,单片机一般软件编程是以汇编语言为主,各家有各家的语法,但大都以RISC的MCU架构为主,其中 RISC (Reduced Instruction Set Computer) 代表MCU的所有指令。都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率。另外初学者要具备单片机I/O接口的应用知识,这在于周边应用电路及各种元器件的使用,须配合自己所学的电子学及电路学等。

12. 请介绍一下MCU的测试方法。


答:MCU从生产出来到封装出货的每个不同的阶段会有不同的测试方法,其中主要会有两种:中测和成测。

所谓中测即是WAFER的测试,它会包含产品的功能验证及AC、DC的测试。项目相当繁多,以HOLTEK产品为例最主要的几项如下:

① 接续性测试:检测每一根I/OPIN内接的保护用二极管是否功能无误。
② 功能测试:以产品设计者所提供测试资料(TEST PATTERN)灌入IC,检查其结果是否与当时SIMULATION时状态一样。
③ STANDBY电流测试:测量IC处于HALT模式时即每一个接点(PAD)在1态0态或Z态保持不变时的漏电流是否符合最低之规格。
④ 耗电测试:整颗IC的静态耗电与动态耗电。
⑤ 输入电压测试:测量每个输入接脚的输入电压反应特性。
⑥ 输出电压测试:测量每个输出接脚的输出电压位准。
⑦ 相关频率特性(AC)测试,也是通过外灌一定频率,从I/O口来看输出是否与之匹配。
⑧ 为了保证IC生产的长期且稳定品质,还会做产品的可*性测试,这些测
试包括ESD测试,LATCH UP测试,温度循环测试,高温贮存测试,湿
度贮存测试等。

成测则是产品封装好后的测试,即PACKAGE测试。即是所有通过中测的产品封装后的测试,方法主要是机台自动测试,但测试项目仍与WAFER TEST相同。PACKAGE TEST的目的是在确定IC在封装过程中是否有任何损坏。

13. 能否利用单片来检测手机电池的充放电时间及充放电时的电压电流变化,并利用一个I/O端口使检测结果在电脑上显示出来?
答:目前市场上的各类智能充电器,大部分都采用MCU进行充电电流和电
压的控制。至于要在电脑上显示,好象并不实用,可能只有在一些专门的电池检测仪器中才会用到;对于一般的手机用户来说,谁会在充电时还需要用一台电脑来做显示呢?要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片。

14. MCU在射频控制时,MCU的时钟(晶振)、数据线会辐射基频或基频的倍频,被低噪放LNA放大后进入混频,出现带内的Spur,无法滤除。除了用layout、选择低辐射MCU的方法可以减少一些以外,还有什幺别的方法?

答:在设计高频电路用电路板有许多注意事项,尤其是GHz等级的高频电路,更需要注意各电子组件pad与印刷pattern的长度对电路特性所造成的影响。最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统似乎有增加的趋势,类似如此的设计经常会造成数位电路动作时,高频电路却发生动作不稳定等现象,其中原因之一是数位电路产生的噪讯,影响高频电路正常动作所致。
为了避免上述问题除了设法分割两电路block之外,设计电路板之前充分检讨设计构想,才是根本应有的手法,基本上设计高频电路用电路板必需掌握下列三大原则:

① 高质感。
② 不可取巧。
③ 不可仓促抢时间。
以下是设计高频电路板的一些建议:

① 印刷pattern的长度会影响电路特性。尤其是传输速度为GHz高速数位电路的传输线路,通常会使用strip line,同时藉由调整配线长度补正传输延迟时间,其实这也意味着电子组件的设置位置对电路特性具有绝对性的影响。
② Ground作大better。铜箔面整体设置ground层,而连接via的better ground则是高频电路板与高速数位电路板共同的特征,此外高频电路板最忌讳使用幅宽细窄的印刷pattern描绘ground。
③ 电子组件的ground端子,以最短的长度与电路板的ground连接。具体方法是在电子组件的ground端子pad附近设置via,使电子组件能以最短的长度与电路板的ground连接。
④ 信号线作短配线设计。不可任意加大配线长度,尽量缩短配线长度。
⑤ 减少电路之间的结合。尤其是filter与amplifier输出入之间作电路分割非常重要,它相当于audio电路的cross talk对策。
⑥ MCU回路Layout考量:震荡电路仅可能接近IC震荡脚位;震荡电路与VDD & VSS保持足够的距离;震荡频率大于1MHz时不需加 osc1 & osc2 电容;电源与地间要最短位置并尽量拉等宽与等距的线,于节点位置加上104/103/102等陶瓷电容。

15. Intel系列的96单片机80c196KB开发系统时,都有那些注意事项?

答:一个即时系统的软体由即时操作系统加上应用程序构成。应用程序与作业系统的接口通过系统调用来实现。用80C196KB作业系统的MCU,只能用内部RAM作为TCB和所有系统**体(含各种控制表)以及各个任务的工作和资料单元。因此一定要注意以下几点:(1)对各个任务分配各自的堆迭区,该堆迭区既作为任务的工作单元,也作为任务控制块的保护单元。(2)系统的任务控制块只存放各任务的堆迭指标,而任务的状态均存放于任务椎栈中。在一个任务退出运行时,通过中断把它的状态进栈,然后把它的堆迭指标保存于系统的TCB中;再根据优先取出优先顺序最高的已就绪任务的堆迭指标SP映象值送入SP中;最后执行中断返回指令转去执行新任务。(3)各任务的资料和工作单元尽量用堆迭实现,这样可以允许各任务使用同一个子程序。使用堆迭实现参数传递并作为工作单元,而不使用绝对地址的RAM,可实现可重入子程序。该子程序既可为各个任务所调用,也可实现递回调用。

使用特权

评论回复
10
Massif123|  楼主 | 2010-1-17 23:37 | 只看该作者
16、IAR软件环境支持NXP的 cortex M3吗
最新的IAR软件已经完全支持NXP的LPC1700系列。

17、NXP哪几款型号支持UCLINUX?

通常,LPC1000和LPC2000都支持uCLinux,主要是根据用户的外设要求和代码量选择合适的芯片

18、外界的温度和湿度以及海拔等因素是否会对LPC系列MCU产生影响?
所有的芯片在外界环境下都有有所变化。NXP的芯片都是工业级的温度范围,因此,在允许的范围内可以保证芯片运行的正确性和可靠性。

19、NXP的cortex-m3同ST的一样吗
NXP的LPC1700是基于Cortex-M3第二版内核的,和第一版内核相比,在速度、功耗和总线结构上都有改进

20、MCU内部的RTC与外接RTC在精度上有差别吗?设计时应注意什么?
因设计和工艺的差别,目前,内部RTC的精度没有外部RTC那么高。

使用特权

评论回复
11
Massif123|  楼主 | 2010-1-19 11:53 | 只看该作者
21、lpc32x0在网站上是否有嵌入wince操作系统的演示代码?若有,与微软正式的版本有何区别? WinCE的BSP已经在网上发布http://www.standardics.nxp.com/s ... /lpc32xx.bsp.wince/ 或者http://www.standardics.nxp.com/s ... x.bsp.wince.adeneo/ 其中一个是NXP自己的免费版本,一个是Adeneo的付费版本。都是基于微软官方的WinCE6.0

22、同样是Contex-M3的内核,LPC1700和STM32比起来有什么优势吗?
LPC1700是业界速度最快的Cortex-M3芯片,而且使用的是Cortex-M3第二版的内核和新的矩阵总新架构,在性能和低功耗设计方面都有所改进。而且NXP在外设接口的设计上也延续了之前在LPC2000系列设计上的优势,保留了存储器加速模块、DMA等提高系统性能的功能。

23、如何进行编程可以减少程序的bug?

答:在此提供一些建议,因系统中实际运行的参数都是有范围的。系统运行中要考虑的超范围管理参数有:物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或非正常回应进行出错处理。

资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如**体容量、存储单元长度、堆迭深度。在程序设计中,对资源参数不允许超范围使用。

应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦写次数与资料存储时间等应用参数界限。

过程参数。指系统运行中的有序变化的参数。

在上述参数群对一程序编写者而言,须养成良好习惯,在程序的开头,有顺序的用自己喜欢文字参数对应列表来替代,然后用自己定义的文字参数来编写程序,这样在做程序的修改及维护时只在程序的开头做变动即可,不用修改到程序段,才比较容易且不会出错。

24、在单片机C编成时,如何才能使生成的代码具有和汇编一样的效率?

答:如果是使用C语言编程时,不太可能生成的代码具有1:1和汇编一样的效
率。

C语言命令要被硬件识别并执行,必须通过编译器编译。编译器分为前端、中端、后端。前端与各种计算机语言写的程序打交道,后端与处理器的基本指令集接轨。所以如果使用C编程时,要达到最高的效率,最好能够很了解所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句,这样就能确保单片机C编程的时候同样的功能不同的C程序,编译效率最高。但是各家的C编译器都会有一定的差异,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%,所以不同厂家的C编译器的编译效率也会有所不同。

25、从51转到ARM会有困难吗?
答:从51转到ARM,其实编程之类的原理都是一样的,但是要注意的是ARM是一个RISC的架构,在ARM的应用开放源代码的程序很多,要想提高自己,就要多看别人的程序,linux,uc/os-II等等这些都是很好的源码。

使用特权

评论回复
12
lpc1700| | 2010-1-20 11:35 | 只看该作者
紧急插入前20

使用特权

评论回复
13
Massif123|  楼主 | 2010-1-23 16:21 | 只看该作者
26、在学习单片机的过程中,如何理解预分频,12时钟模式(6时钟模型)等概念?

答:预分频器的英文是prescaler。它就是将输入的频率信号分频,然后再输出。HOLTEK公司有一款最基本的8位I/O型单片机HT48R05A-1,我们就以这款单片机为例说明。HT48R05A-1有一个8位向上计数的定时器Counter。系统时钟Fsys(4MHz)进入八阶预分频器(8-stage Prescaler)进行分频,再进入定时计
数器Counter计数。根据软件设置,预分频器可以将Fsys进行2的n次方分频(n=1~8)。举例来说,如果软件设置为预分频器2分频,那幺预分频器输出的频率就是Fsys/2=2MHz,这个2MHz信号再进入定时计数器Counter。

如果需要HT48R05A-1或者其它各类HOLTEK单片机的详细资料,可以在如下地址下载:http://www.holtek.com.cn/referanc/htk_book.htm 12时钟模式(6时钟模型)应该就是在MCS51系列中,12个系统时钟为一个机器周期,2个系统时钟为一个状态,即一个机器周期有6个状态。

27、NXP的微控制器可以驱动多少字段的LCD?

目前通过MCU来驱动字段都是有限的,特别是电表显示内容越来越多之后, 以后电表字段的驱动将都会采用外部LCD 驱动.

28、ARM芯片内部有RTC,还要必要用外部时钟芯片 ?
电表对RTC的要求是非常高的,在新标里面的RTC还必须带有温度补偿, 所以一个高精度的外部时钟是必须的。

29、恩智浦MCU四种低功耗模式之间能相互切换吗? 如果能是通过什么方式相互切换,用户编程,还是其自动切换?
用户可以通过编程切换至各种低功耗模式。某些事件也会触发芯片从低功耗模式唤醒至正常工作模式。

30、恩智浦MCU可有支持汉字的LCD驱动器 ?
其实不管驱动什么,汉字也好图形也好,都可以用段码的方式来驱动(显示内容和位置固定),这都需要在液晶模组公司定做。 当然如果针对汉字我们也可以用字符驱动芯片(可以更改显示内容)

使用特权

评论回复
14
kun9766| | 2010-1-23 18:41 | 只看该作者
好贴得顶,呵呵

使用特权

评论回复
15
nxponline| | 2010-1-24 22:00 | 只看该作者
是啊,加油!

使用特权

评论回复
16
Massif123|  楼主 | 2010-1-25 00:38 | 只看该作者
31.ARM+Linux 好难啊,winCE是不是容易学?
答:ARM+Linux涉及东西比较多,不容易入门,能达到更深层次的人更少习惯了MS上开发的人学习winCE很快,出现问题比较少,掌握这个技术的人也相对多。
一门技术的前途与能够掌握该技术的人数成反比

32.我没学过ARM7能直接学ARM9吗?

答:可以直接学ARM9,有基础学得更快,但并不是什么都得来一遍。
33.嵌入式往哪个方向发展最好?
答:纯硬件、驱动开发、应用开发,搞好了都NB,要看个人的基础。
原来学计算机、软件工程的,建议搞应用开发,切入比较容易;
原来学电子信息的,如果搞软件,可以考虑驱动开发,因为你软硬基础都好,做驱动开发有优势。
嵌入式 ARM嵌入式 ARM开发板 ARM开发工具 嵌入式系统 嵌入式开发

使用特权

评论回复
17
寒江月刃| | 2010-1-25 08:40 | 只看该作者
楼主继续~~~~

使用特权

评论回复
18
Massif123|  楼主 | 2010-1-25 17:46 | 只看该作者
谢谢鼓励!我继续贴啊,也欢迎大家来接龙
34、LPC32x0系列中的浮点向量协处理器是一种内嵌的DSP吗?请问编写程序时需要掌握DSP的相关知识吗?
LPC3200中的VFP不是内嵌的DSP,其实ARM926内核本身是带有DSP extension指令的。用户可以把VFP看作是协助ARM926做复杂运算的独立部件。对于一般的用户而言,不需要深入了解DSP的知识,只需在编译过程中打开VFP的设置即可。当然,如果能了解VFP的机制和流水线操作,对于写出更高效的代码是有好处的。

35、NXP MCU提供哪些接口?
我们的LPC1700和LPC2000系列产品主要有多达4个UART,3个I2C, SPI, SSP等常用的接口,还有以太网、USB、CAN等接口。LPC3000系列的接口更为丰富,有7个UART。此外,我们还有独立的温度传感器、I2C接口的LCD、RTC,以及串口转换和扩展芯片

使用特权

评论回复
19
keting9424| | 2010-1-26 09:14 | 只看该作者
谢谢楼主!

使用特权

评论回复
20
riki2006| | 2010-1-26 09:42 | 只看该作者
1# Massif123 很强,期待下文

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

276

帖子

1

粉丝