MCU

MCU是Microcontroller Unit(微控制器单元)的缩写,它是一种集成了中央处理器(CPU)、存储器(ROM、RAM)、输入/输出端口(I/O)、定时器(Timer)、串行通信接口(UART、SPI、I2C等)和其他外围设备控制器的单个芯片。MCU通常用于嵌入式系统中,用于控制各种电子设备和系统。

由于其集成度高、体积小、功耗低以及成本相对较低等特点,MCU被广泛应用于各种嵌入式系统中,例如智能家居设备、医疗设备、汽车电子系统、工业自动化等。MCU的选择通常基于应用的需求,如处理性能、功耗、外设接口等因素。

据IC Insights的市场研究报告中指出,2015年全球MCU市场产值达168亿美元(比2014年增长5.6%),出货量达209亿颗(比2014年提升12.4%),而平均每颗售价则是0.81美元。而未来到2019年,MCU的销售量仍维持逐年递增(年复合成长率CAGR约为6%)、ASP逐年递减的趋势,但整体MCU市场规模仍是上扬的。

物联网行业的快速发展是驱动MCU发展的一大动力。其中又因为汽车驾驶信息系统、油门控制系统、自动泊车、先进巡航控制、防撞系统等ADAS系统对于32位MCU的大规模需求,将刺激32位MCU的大幅增长。此外,物联网领域的智能应用正方兴未艾,比如医疗电子用品(如智能血糖机、电子血压计等)、个人健康监测产品(如智能手环、智慧手表、智能衣、心率带等等)这些需要低功耗、长时间使用、无线通信的产品,也必须倚赖MCU来实现。微控制器(MCU)作为物联网的核心零组件,无论在市场规模上还是技术上都将获得进一步发展,那么,在当前物联网快速部署的大形势下MCU自身发展都呈现出哪些趋势呢?
  
1、32bit MCU将成主流
  
早期MCU架构多是8位为主,且整合开发环境(IDE)也是以8位为主。随着物联网时代任务的复杂化,对计算能力越来越高促使MCU开始迈向16或32位来设计,与此同时相关的软件开发环境也提升到32位,甚至做到可以向下兼容,让开发环境不受限于硬件,以提供更具弹性的开发空间。

8位/16位/32位MCU出货量数据(IC Insights,2014)

  
此外,目前8位和32位MCU的价差也已经缩小,32位MCU单颗报价在1.5~4美元之间,工作频率大多在100~350MHz之间,执行效能更佳,应用类型也相当多元。众多物联网应用对数据处理能力要求越来越高,虽然8位MCU仍会有其一席之地,但32位MCU一定会成为市场主流。根据IC Insights 2014年的数据,以出货量计,32位MCU已经接近8位MCU,而销售额32位MCU已经跃升第一位。随着32位MCU生态环境的建立和成本的进一步降低,预计未来将有一个时间点实现井喷。但需要注意的是,由于32位MCU操作数与内存长度的增加,相同功能的程序代码长度较8/16bit MCU会增加30~40%,这导致嵌入式FLASH内存容量不能太小,而芯片引脚数量增加,可能会限制32bit MCU的成本缩减能力。
  
2、低功耗是核心竞争力
  
当前市面上各种移动电子产品最令人诟病的一点莫过于需要频繁充电,各家智能手机/手环厂商都在努力的降低功耗,提升续航能力。功耗的限制使得产品设计时许多功能被牺牲。而对于物联网世界里数量更为庞大的无线传感节点,功耗和续航时间更是直接关系到产品的可行性。比如在散布在桥梁或者隧道中用于检测位移形变的传感器节点,数量庞大且只能依靠电池供电,要求电池续航时间通常达十年以上,这对MCU的功耗提出了非常苛刻的要求。即使对于很多方便供电的应用(如智能家居),在当前绿色环保低碳口号的号召下,厂商也在想尽办法降低系统功耗。而如何在低功耗的前提下又能实现较高的运算能力,成为摆在MCU厂商面前的一道难题。目前几乎所有的主流厂商都瞄准了这一市场需求,纷纷推出各自的超低功耗MCU。
  
3、高整合度 MCU+成趋势
  
物联网对于其中每个节点最理想的要求是智能化,即能够通过传感器感知外界信息,通过处理器进行数据运算,通过无线通讯模块发送/接收数据。因此,集成传感器+MCU+无线模块的方案始终是各MCU厂商的追求。更有甚者,对于一些相对容易实现整合的传感器类型,如触摸屏控制器、加速度计、陀螺仪等,某些技术实力强大的厂商已经实现了与MCU整合的单芯片SOC/SIP。当然由于传感器和无线通讯技术的多样性,以及工艺技术上的差异,一味的SIP或SOC整合可能并不一定是明智之举(如气体传感器、温湿度传感器整合方案就较为困难),但厂商提供MCU+的整体解决方案已经成为毫无疑问的必然趋势。
  
本文转载自传感器与物联网网,由SITRI产业研究部原创。如涉及版权,请及时联系处理!
围观 330

在项目开发的过程中,发现程序总是死在判断DMA一次传输是否完成这个标志位上。进一步回退分析,发现是在I2C读的过程中,有使用到DMA去取外部I2C设备的data。

但是data并没有读完,Data为32bits,DMA在读到18bits时,就出现读不到data bit了。导致I2C硬件模块不能进一步动作,SCK一直被拉低,没有clock输出,SDA也是如此。

下面是通过示波器抓到的波形:

在上面的波形图中,绿色的是SCK,蓝色的是SDA。

在第一幅波形图中,有2段波形,第一段连续的I2C波形,经过确认I2C硬件和DMA配合是正常的。第二段则是有一段I2C波形,然后就SCK和SDA就都被拉低了。

将第一幅图的第2段波形放大,就是第二副图看到的情况。可以很明显的看到SCK输出有被其他因素打断。I2C吐出几个clock,被其他因素打断了,clock线即SCK被拉低一段时间,然后clock线再继续吐出几个clock。

直到I2C被频繁中断,clock吐不出来为止,SCK和SDA都被拉低,此时明显的I2C和DMA的配合过程被其他因素频繁的干扰打死了。

通过示波器抓到的波形验证了这一点,然后再来分析代码和串口输出,发现是外部GPIO一直有中断输入,Cortex-M3 MCU频繁的响应中断,导致I2C&DMA操作被打挂了。

有什么办法来解决这个问题?

方法就是在I2C和DMA操作的过程开始处关闭所有中断,而在操作结束的时候重新打开中断,以免I2C&DMA操作被其他中断打断。

ARM MDK编译环境自带的编译器ARMCC,含有内置的c函数,可供操作中断用:

__enable_irq();

__disable_irq();

不过debug发现这两个函数只会在privileged mode使用。也就是说需要Cortex-M3 MCU先进入privileged mode,才能调用这两个函数。

用什么方法让MCU从user mode切换到privileged mode呢?

exception handler!

可以用SVC啦,软件可以利用SVC制造一个exception,然后在exception handler中利用MCU的privileged mode来完成自己的任务。有点类似于linux里面的系统调用。

SVC exception可以调用SVC函数,而SVC函数可以传入参数,也可以返回参数。转为系统调用而设计。

举个例子,用户程序调用read()这个系统调用,read()会引发SVC exception,进而调用SVC函数,read()函数的参数传递给SVC函数,SVC在内核态执行硬件动作,并将SVC函数的返回结果,作为read()函数的返回,返回给用户程序。当然linux里面并不一定是SVC,这里只是做个类比。

也就是说SVC可以完成从用户态到内核态的转变,不让用户直接操作硬件。用户只需要记住系统调用API的名字和函数即可,而不用管硬件的具体实现。

所以这里我们就把I2C读的操作放在一个SVC函数里面去实现,并且在SVC函数的开始处调用__disable_irq();在函数的结束处,调用__enable_irq()。

经过验证,I2C&DMA操作再也不会被中断打断了。

参考资料:

1、http://www.keil.com/pack/doc/cmsis/Core/html/group___core___register__gr...

2、cortex-M3权威指南

文章来源: 博客园

围观 439

作为嵌入式软件工程师认为世界上最可悲的事情是你愉快的敲完代码等待验证,而编译器却提示你No space or unable to allocate space…,顿时心中一万只草泥马在奔腾有没有。好吧没有办法,由于成本和项目需求的限制,不得不选择小Flash的MCU,这就导致了我们为了缩减Flash的空间打开各种优化、一字节一字节的裁剪、各种map文件对比分析,只为省出一点空间,接下来总结一下遇到这种问题时的优化步骤,当然这是在程序设计后期发现Flash的限制从而进行优化,如果你有一个好的编程习惯,应该从构建初期就应该注意资源受限的问题,合理安排驱动函数实现方式、变量类型的定义、标准库的使用等等。So what should I do ?

资源受限MCU Flash空间占用优化步骤:

  • 避免重复功能,排查软件工程中,重复功能的代码片段,抽象出来,重新进行封装;
  • 减少内联函数inline,内联函数过大且过多的调用无疑会增加代码量,占用过多的flash,如果代码运行速度要求不高类似这样的内联函数,尽量改成函数调用;
  • 开启最高优化,优化时应倾向于速度和代码量的平衡,不能一味地缩小代码量,因为这很可能会出现意想不到的问题,特殊源文件也可开局部优化功能;
  • 减少运行库调用,编译器自带的运行库一般都过大而复杂,例如常用的printf调试打印,将会占用大量flash空间,因此设计代码时,应通过宏配置可禁掉类似printf的调试代码或直接通过UART发送字符功能打印调试信息;
  • 自行实现标准库函数,简单的库功能如:memcpy、memset等功能自行实现也会减少标准库调用而导致占用过多的flash空间;
  • 使用MCU本身的硬件特性,如果支持,尽量使用MCU的硬件乘法器或者浮点运算单元,这样会比直接进行乘法或者浮点运算运行减少很多代码量;
  • 定义恰当的变量类型:C编译器支持变量的类有char、int、long等,定义恰当的变量类型,可以有效的减少代码和数据的长度,同时也能提高运行效率。
  • 总结就到这里,如果你有更好的办法,可以留言一起讨论哦。

    文章来源:周立功单片机

    围观 1146

    变频马达主要依靠半导体元件组成的电子电路来驱动马达运转,其中MCU数位控制技术的良寙攸关着马达效率是否理想;而在MCU控制技术日趋成熟,加上FOC演算法助力之下,变频马达效率将逐步跃进。

    马达是家电产品中,不可或缺的动力元件,马达的使用量,也是生活舒适程度的指标之一。家电产品中,常见的马达基本上有三种:交流感应马达(AC Induction Motor, ACIM)、直流有刷马达(Brushed DC Motor)、直流无刷马达(BLDC/PMSM)(亦称变频马达)。事实上,马达的分类方式可从以下几点区分。

    .电源

    从电源的使用上来看,可简易分成交流马达与直流马达两大类。

    .控制方式

    从马达控制上来看,可以简易分成同步控制与非同步控制(感应控制)两大类。BLDC/PMSM马达采用同步控制方式,系利用定子上的电流控制来同步控制马达转子的旋转。ACIM马达采用的是感应控制方式,系利用定子的电流环的控制,感应带动转子,转子磁场环与定子磁场环因而存在速度差。

    .定子绕线组数

    最常见的有三相马达与单相马达,其中三相绕组还有分成Y结线与星型结线两种。

    .电刷

    从电刷有无来看,可以简易分成有刷马达与无刷马达两大类。有刷马达将直流电供给绕组的机构为电刷与整流子(固定在定子上的就是电刷,固定在转子上的就是整流子),无刷马达则是采用电子电路来取代电刷与整流子。

    家电产品加速导入 高效率节能马达商机起飞

    驱动直流马达在家电产品的使用风潮的主因有以下几点。

    .能源危机

    根据国际能源总署(IEA)资料显示,马达是耗电量最大的应用,约占全球电力消耗46%以上,因而也成为业界落实节能减碳的首要改善重点,其中直流马达在高效率节能上的表现,优于传统的ACIM。直流马达的使用,已渐成家电产品动力元件的趋势。

    据估计,从IE1升级到IE3,省电效率可提升8%。马达最低能效标准(MEPS)政策实施,目前是在宣导期,未来一旦进入强制期,将掀起一波马达汰旧换新风潮,并刺激马达制造商与半导体厂,加速推出更高效率的新方案。

    .电源技术进步

    三个关键的电源技术--锂电池元件、开关电源供应(Switching Power Supply)技术以及太阳能板电源技术的采用,让家电产品产品与行动电源结合成为新的安全家居与休闲概念产品。例如近年来在日本大为流行的充电式风扇,标榜为安全家电,其停电可使用电池,有电时使用转接头(Adaptor)透过市电供电。另外欧洲人喜欢旅游,充电式风扇可随身携带,露营时没有市电插,也可以有电风扇吹。充电式风扇除了可结合太阳能板充电,也可以利用汽车DC12伏特(V)充电,使用相当方便。

    .数位控制IC技术成熟

    如今微控制器(MCU)价格大幅下降,以迎合家电产品设计加量不加价的设计需求。此外,数位脉宽调变(PWM)控制技术成熟,可用同一颗IC做到方波或弦波控制,让马达制造商与半导体业者在厂物料控管上更为方便。

    .DC马达元件优势

    在同样功率下,DC马达功率转换效率比传统的ACIM还要好。此外,家电产品因应成本降低,常须使用塑胶材料,而塑胶材料非常怕过热,例如养生的果菜汁机、食品搅拌机等。DC马达相较AC马达不易发烫,因而更具优势。

    另一方面,在同样功率下,DC马达扭力也较ACIM强。近年来家电机构设计强调美观,有小型化设计趋势,因此DC马达较ACIM更合适用于体积小但要求大扭力的家电马达产品,例如电动起子、饮水机用水泵、医疗用气泵等。

    .家电新趋势

    居家生活品质的提高已成为全球趋势,DC马达的静音诉求与无级调速功能大量运用在新家电产品功能设计上,例如DC落地扇、吊扇、空调产品等。

    驱动高效率BLDC MCU关键设计有门道

    BLDC马达控制主要是采用同步控制方式,更准确地说,BLDC是一种双回授控制方式。由MCU控制定子电流方向,主导转子下一步的位置,转子位置回授,转子位置回授分成有感测器(Hall或是Encoder)与无感测器(Sensorless)两种方法,另外,电流回授主要目的在于过电流保护用。整个BLDC方案系统方块图如图1;从图中,可以简易看出决定马达产品效率的关键元件。
      

    图1 BLDC系统配置方块图

    .Power电路

    主要分成市电应用与DC电源应用两种,主要设计考量为功率转换效率。

    .MOS元件

    主要为Rds规格,考量重点在于金属氧化物半导体场效电晶体(MOSFET)发热损耗。

    .Gate Driver驱动电路

    主要有两种--三级管电路与闸极驱动器(Gate Driver) IC;考量重点在于Gate Driver Rising/Falling Timing所造成的开关元件损耗。

    .MCU

    依据产品方案需求,可选择以方波或是弦波控制,搭配马达回授控制感测器方案与无感测器方案,可以分成四种方案:方波Hall方案、方波Sensorless方案、弦波Hall方案与弦波Sensorless方案。

    .马达材料

    主要考量铜损、铁损等马达材料特性所造成的功率损耗。

    MCU马达控制内部设计主要分成五大部分(图2),以下列点说明。
     

    图2 PWM Edge-aligned Mode与Center-aligned Mode电路

    .PWM调制电路

    主要有Edge-aligned Mode与Center-aligned Mode两种模式。

    .马达定子电流控制电路

    搭配Hall Sensor Decoder与Mask电路配置决定方波控制与弦波控制方式。

    .马达驱动电路控制

    主要设定MOS死区时间(Dead-time)、外部Gate Driver电路驱动极性、防呆电路等控制方式。

    .马达转子侦测电路

    利用专属的Timer观测转子位置变化,侦测转子转速与堵转与否。

    .马达保护电路

    主要有马达驱动过电流保护电路与马达堵转保护电路两种模式。

    此外,马达控制方式基本上采用的是控制系统常用的PID控制方法(图3),以速度环PID控制为例,其运作步骤如下。

     
     
    图3 马达PID控制要素

    1、从人机介面取得控速命令,例如VR=0.5V代表机械转速500rpm

    2、决定马达定子电流控制方式,例如以方波控制或者是弦波控制。

    3、采用Hall或者是Sensorless方式监控马达转子位置并监控转子转速。

    4、MCU计算马达是否到达转速要求,利用PWM机制做转速调整。

    要特别注意的是,高效率马达控制很重视换相点与定子电流的换相位置,依据马达特性不同转速,对换相点的补偿可能会有所不同,须要依产品需求来做换相点控制的补偿与调整,因此可以轻易地从马达的DC Bus电流平稳度,看出马达控制是否牢靠。

    FOC演算法助力 PMSM控制效率升级

    针对PMSM(反电动势是弦波),高效节能马达控制方式采用磁场定向控制(Field Oriented Control, FOC)方式控制,搭配这种弦波电流方式控制,可以达到最高效率,主要应用于空调类压缩机与大功率马达应用,例如跑步机、电动摩托车等。

    FOC方案系统架构图如图4,A线的右边可以说是用定子的角度来看系统变化,而A线的左边就是以转子的角度来看系统变化。

    图4 FOC演算架构图

    FOC是用向量来代替定子电流做控制,一般又称为向量控制(Vector Control),其运算原理主要是将马达的三相电流的三维座标轴,转换成二维座标轴(d和q座标轴)上。

    FOC系采用数学方法来实现三相马达的力矩和励磁的解耦控制,因此定子电流可以被看成励磁电流Id(产生励磁)或交轴电流Iq(控制电磁力矩,类似于DC马达的电枢电流)

    FOC演算法优点在于可在最佳的扭力之下工作,当负载变化时,速度回应快速而精确,让马达的暂态效率得到优化,且在动态反应中,能够达到非常精准的可变速度之控制。

    FOC方案设计亦可分成有FOC-Hall与FOC-Sensorless两种方式(图5)。

     

    图5 FOC-Hall与FOC-Sensor-less电路架构图

    .FOC Hall

    利用Hall讯号做转子位置侦测,可精准侦测马达转子位置

    .FOC Sensorless

    透过两路类比数位转换器(ADC)侦测电流,经过MCU转换计算取得马达转子位置。

    要特别注意的是,要做到精准的Ia/Ib电流检测,除ADC转换速度的规格,通常须要求到1Mbit/s的采样速率之外,包含印刷电路板(PCB)设计与外部滤波电路的搭配,再加上MCU演算法的熟悉,环环相扣,都是相当重要的。

    文章来源: 畅学电子

    围观 200

    目前,全球的MCU呈百花齐放趋势,欧、美、日、台均表现出众。中国作为全球最大的芯片销售国,每年消耗掉的MCU数量占据全球市场总量的70%左右,然而由中国芯片厂家直接生产的MCU芯片却凤毛麟角,并且绝大部分仍处于低端的4/8位MCU芯片阶段。不过,国内还有宏晶、兆易创新等企业在MCU高端领域发力,未来还是值得期许的!

    什么是MCU?

    MCU(Micro Controller Unit),又称单片微型计算机(SingleChip Micro computer)不过,MCU可不是一台机器,而是一块集成电路芯片。

    单片机是采用超大规模集成电路把中央处理器CPU、随机存储器RAM、只读存储器ROM、冲断系统、定时器/计数器、AD转换器、通信接口和普通I/O口等集成到一块硅片上,构成的一个微型的、完整的计算机系统。

    单片机的CPU相当于PC机的CPU,单片机的数据存储器RAM相当于PC机的内存,单片机的程序存储器ROM相当于PC机的硬盘,单片机的I/O口相当于PC机的显卡、网卡、扩展卡等的插槽。

    MCU发展简史

    ☞1975年,美国德州仪器公司(TI)首次推出4位单片机——TMS-1000,标志着单片机正式诞生。

    ☞ 1976年,Intel公司研制出了MCS-48系列8位单片机,使单片机的发展进入了一个新阶段。MCS-48系列单片机内部集成了8位CPU、多个并行I/O口、8位定时器/计数器、小容量的RAM和ROM。当时还没有串行通信接口,操作相对简单。

    ☞1980年,Intel公司在MCS-48系列单片机的基础上,推出了MCS-51系列8位高档单片机,这就是当前大名鼎鼎的“51单片机”的祖先。MCS-51系列单片机比MCS-48系列单片机有明显提高,内部增加了串行通信接口。MCS-51系列单片机因其性能可靠、简单实用、性价比高深受欢迎,被誉为“最经典的单片机”。据悉,全球各大高校的单片机教材均使用了MCS-51系列8位单片机为教程内容。

    ☞1983年,16位单片机正式问世,不过由于性价比并不理想,遂未得到普及。16位单片机主要被应用于复杂的控制系统以及早期的嵌入系统。

    ☞90年代之后,集成电路技术高速发展,32位单片机应运而生,嵌入式系统因此得到大力推广。就在32位单片机大举入侵市场之时,8位单片机将被32位单片机取代的声音一时甚嚣尘上。不过,也有业内人士表示,未来8位和32位将以互补性的组合占据MCU领域,而16位产品面对8位和32位MCU的“双向夹击”,或将逐步走向消亡。

    MCU主要分类

    ☞MCU按其存储器类型可分为无片内ROM型和带片内ROM型两种。对于无片内ROM型的芯片,必须外接EPROM才能应用(典型芯片为8031)。带片内ROM型的芯片又分为片内EPROM型(典型芯片为87C51)、MASK片内掩模ROM型(典型芯片为8051)、片内FLASH型(典型芯片为89C51)等类型;

    ☞按用途分为通用型和专用型;

    ☞根据数据总线的宽度和一次可处理的数据字节长度可分为8、16、32位MCU。

    MCU主要应用领域

    目前,国内MCU应用市场最为广泛的是消费电子领域,其次是计算机与外设和汽车电子市场。

    ☞消费电子,包括家用电器、电视、游戏机及音视频系统等;

    ☞工业领域,包括智能家居、自动化、医疗应用及能源生成与分配;

    ☞汽车领域,包括汽车动力总成和安全控制系统。

    MCU未来市场趋势

    1、后来居上,32位MCU将成主流。

    据ICInsights市场研究报告显示,2015年全球MCU市场规模达到168亿美元,出货量255亿颗。对于32位MCU市场而言,2015年是具有重大标志性意义的一年,全球32位MCU出货量超过4/8位MCU与16位MCU出货量的总和,而且未来几年应该会保持30%左右的高速增长。

    在物联网应用中,很多场合不仅需要实现机械化向电磁化、智能化的转变,而且还要考虑可靠的连接性、安全性和保护性,所有这些功能的实现都需要MCU的参与,因此32位MCU会是物联网应用的主流。

    2、MCU大整合将成未来发展新趋势。

    随着智能设备、物联网等产业的快速发展,无线RF、传感器、电源管理等搭配MCU成为一种新趋势。高度整合的MCU不仅可以方便客户开发产品,并且可减少印刷电路板的占用空间,从而能够降低一部分成本,将来非常具有市场潜力。

    3、ARM核心与专用核心MCU,短期内难分伯仲。

    从MCU整体发展看,专有核心MCU仍保持着强大竞争优势,两大国际厂商瑞萨和Microchip还在坚守自己的核心,并未转向开发ARM核心MCU,这是因为专有核心MCU在相关应用领域有长期积累,在软硬件开发和支持都很成熟。从短期来看,专有核心MCU仍会保持增长。但专有核MCU也存在瓶颈,比如很难实现跨领域推广,开发工具成本要比ARM核高,而且支持力度要比ARM核小,二者未来长期发展状况将如何呈现,将有待观察。

    MCU全球超级明星榜

    1、STM32系列

    由意法半导体推出的STM32系列单片机,在业内赫赫有名。这是一款性价比超高,功能超强的单片机。2016年初,STM32全球出货已破16亿颗大关,相当于每秒就有20颗被出售,产值超过了STM8。意法半导体方面表示,2019财年意法半导体MCU在中国市场的市占率要达到20%,STM32则是其首要武器。

    STM32系列家族主要有:STM32 F0、STM32 F1、STM32 F2、STM32 F3、STM32 F4、STM32 L0、STM32 L1、STM32T、STM32W等。其划分标准:从内核上分,可分为:Cortex-M0/-M0+、Cortex-M3、Cortex-M4,以及Cortex-M7。从应用上分,大体分为:超低功耗型、主流型、高性能型。

    2、PIC系列

    PIC系列单片机是美国微芯公司(Microship)推出的产品,该系列单片机不是单纯的功能堆积,而是以多型号来满足不同层次的需要,并可提供低价的OTP芯片。另外,该系列单片机还具有低功耗睡眠功能、掉电复位锁定、上电复位电路、看门狗电路等功能,而且外围器件少、占用空间小;成本低,保密技术也十分可靠,可最大限度地保护开发者的利益。因此,在工业控制、仪器仪表、计算机、家电等诸多领域具有极其广阔的发展前景。

    3、51系列

    作为入门级别的51单片机,最早由Intel推出,主要有8031、8051系列。由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。后来Atmel以8051内核为基础推出了AT89系列单片机。

    4、TMS系列

    TMS系列单片机,是由德州仪器推出的8位CMOS单片机。具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。其低工作功耗CMOS技术,宽工作温度范围,噪声抑制,再加上高性能和丰富的片上外设功能,使TMS370C系列单片机被广泛应用于汽车电子,工业电机控制,电脑,通信和消费类电子等领域。

    5、MSP430系列

    MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器。主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。因其低功耗,速度快,指令少,汇编语言灵活等特性,颇受业内好评。

    其他如Atmel的AVR系列、Freescal的MC系列、麦肯的MDT系列等都非常优秀且被广泛应用,在此就不一一赘述了。

    以下为目前国内最为主流的MCU厂商:(含在华外资及台资,排名不分先后)

    1、中颖电子股份有限公司

    简介:中颖电子股份有限公司创立于1994年,是一家专注于单片机集成电路设计与销售的高新技术企业,是首批被中国工业及信息化部及上海市信息化办公室认定的IC设计企业,并连续11年被认定为上海市高新技术企业。2012年中颖成功在深市A股创业板上市。

    主营业务:8-bit Flash MCU、8-bit OTP/Mask MCU、16-bit DSP、4-bit OTP/Mask MCU

    应用领域:家电、白色家电、黑色家电、汽车电子周边、运动器材、医疗保健、四表(水、电、气、暖)、仪器仪表、安防、电源控制、马达控制、工业控制、变频、数码电机、计算机键盘、鼠标、网络音乐(便携式、车载、床头音响)、无线儿童监控器、无线耳机/喇叭/门铃。

    2、上海东软载波微电子有限公司

    简介:上海东软载波微电子有限公司(前身为上海海尔集成电路有限公司)专注芯片设计16年。从最初专注于研发8位通用MCU,直至现今完成研发并量产的电力线载波通信芯片、无线射频芯片、触控类芯片等不同类型的集成电路产品。2015年被青岛东软载波科技股份有限公司合并。

    主营业务:安全芯片、通用芯片(8位 MCU/32位 MCU)、专用芯片、射频无线、触控芯片

    应用领域:消费电子、汽摩电子、工业/控制、照明、仪表仪器

    3、炬力集成电路设计有限公司

    简介:炬力集成电路设计有限公司是全球最大的个人便携多媒体SOC供应商之一,创立于2001年,2005年于美国纳斯达克挂牌上市,是一家致力于集成电路设计与制造的大型半导体技术集团。旗下拥有炬芯(珠海)科技有限公司、上海炬力集成电路设计有限公司、炬才微电子(深圳)有限公司。

    主营业务:SOC

    应用领域:消费电子

    4、盛群半导体股份有限公司

    简介:盛群半导体为台湾专业微控制器IC设计领导厂商,营业范围主要包括微控制器IC及其周边元件之设计、研发与销售。

    主营业务:电源管理、LCD/LED驱动/控制芯片、超高解晰度指纹辨识Sensor与各类型传感器模块组件

    应用领域:语音、通讯、计算机外设、家电、医疗、车用及安全监控

    5、深圳市中微半导体有限公司

    简介:深圳市中微半导体有限公司是成立于2001年,为设计、制造、测试、应用与销售各种CMOS集成电路及MCU的专业IC设计供应厂商。

    主营业务:8Bit MCU、电容式触控型MCU、带LED/LCD显示驱动型MCU、LED恒流照明驱动电路、无线遥控电路、IGBT、通用及专用逻辑电路

    应用领域:智能家电、汽车电子、安防监控、LED照明及景观、智能玩具、智能家居、消费类电子

    6、上海灵动微电子股份有限公司

    简介:上海灵动微电子股份有限公司(股票代码:833448,股票简称:灵动微电)创立于2011年,是国内专注于MCU产品与MCU应用方案的领先供应商,是中国工业及信息化部及上海市信息化办公室认定的集成电路设计企业,同时也是上海市认定的高新技术企业。

    主营业务:基于8051、ARM®Cortex®-M0、ARM®Cortex®-M3内核的Flash MCU、OTP MCU、EEPROM MCU

    应用领域:工业控制、智能家电、智慧家庭、可穿戴式设备、汽车电子、仪器仪表

    7、华润微电子有限公司

    简介:华润微电子有限公司是华润集团旗下负责微电子业务投资、发展和经营管理的高科技企业,亦是中国本土规模和影响力最大的综合性微电子企业之一。目前拥有6-8英寸晶圆生产线4条、封装生产线2条、掩模生产线1条、设计公司4家,为国内唯一拥有齐全半导体产业链的企业。

    主营业务:集成电路设计、掩模制造、晶圆制造、封装测试及分立器件

    应用领域:汽车电子、照明、消费电子、工业控制

    8、华大半导体有限公司

    简介:华大半导体有限公司(简称华大半导体)是中国电子信息产业集团有限公司(CEC)整合旗下集成电路企业而组建的集团公司。华大半导体是中国十大IC设计企业之一。

    主营业务:MCU、智能卡、RFID、模拟电路、北斗导航、显示多媒体

    应用领域:工业控制、消费电子、照明

    9、瑞萨电子(中国)有限公司

    简介:日本瑞萨电子在中国成立了1家设计公司、3家制造公司、9个销售点,员工人数超5000人。瑞萨电子中国以MCU为核心,提供系统LSI、模拟及功率半导体器件等颇具竞争实力的产品。

    主营业务:MCU、模拟及功率半导体器件

    应用领域:消费电子、汽车电子、移动通信

    10、凌阳科技股份有限公司

    简介:凌阳科技股份有限公司是全球领先的消费性IC设计公司。2006年,凌阳科技将控制与周边事业群分割成立了凌阳创新科技,专注于研发、制造MCU、光学感知器、RF无线传输晶片、SOC晶片等。

    主营业务:液晶IC、微控器IC、多媒体IC、语音、音乐IC及各式ASICs

    应用领域:消费电子、工业控制

    11、希格玛微电子

    简介:希格玛微电子是一家专业集成电路设计企业,于1996年成立深圳公司,1999年成立北京公司,2006年成立香港办事处。目前主要致力于计算机周边产品控制芯片、语音芯片、MCU芯片、触摸芯片、电源管理芯片、功率器件MOS和TGS产品等各种集成电路芯片产品的研究、设计、开发和销售。

    主营业务:语音芯片、MCU芯片、PC周边产品控制芯片、触摸芯片、电源管理芯片、功率器件

    应用领域:消费电子、工业控制

    12、深圳宏晶科技有限公司

    简介:宏晶科技是新一代增强型8位单片微型计算机标准的制定者和领导厂商。致力于提供满足中国市场需求的高性能单片机技术,在业内处于领先地位,销售网络覆盖全国。

    主营业务:高性能STC系列MCU和SRA

    应用领域:消费电子、工业控制

    13、合泰半导体(中国)有限公司

    简介:合泰半导体成立于2012年,是台湾盛群半导体股份有限公司在大陆的子公司,主要负责盛群产品在中国的研发、生产及销售。

    主营业务:MCU

    应用领域:工业控制、消费电子、照明、汽车电子

    14、深圳贝特莱电子科技股份有限公司

    简介:深圳贝特莱电子科技股份有限公司(BetterlifeCorporation)于2011年7月成立,是一家高端集成电路设计国家级高新技术创新型企业,致力于开发具有自主知识产权的核心技术,专注于消费类电子的IC设计,在触控、AMOLED驱动、指纹识别及生命感知产品领域卓有建树。

    主营业务:触控芯片、MCU、指纹识别、电极式传感、压力触控

    应用领域:智能手机、平板电脑、智能照明

    15、联咏科技

    简介:联咏科技为台湾IC设计领导厂商,成立于1997年,专注于产品设计、研发及销售。联咏科技于2000年获证期会通过上柜挂牌交易,并于2002年获准于台湾证券交易所上市,股票代号为:3034。

    主营业务:驱动IC、MCU

    应用领域:消费电子设备、高级电子仪表、安检系统、便携式医疗设备、电机控制、智能卡、无线通信

    16、松翰科技

    简介:松翰科技成立于1996年,是世界最快速成长消费性ICs领导厂商之一。

    主营业务:MCU、全系列各式IC产品

    应用领域:消费电子、医疗设备、无线通信

    17、新唐科技

    简介:新唐科技成立于2008年,同年7月受让分割华邦电子逻辑IC事业部正式展开营运,并于2010年在台湾证券交易所正式上市挂牌。新唐科技专注于开发模拟/混合记号,微控制器及计算机云端相关应用IC产品,相关产品在工业电子、消费电子及计算机市场皆具领先地位。

    主营业务:模拟/混合记号、微控制器及计算机云端相关应用IC产品

    应用领域:无线通信、汽车电子、消费电子、工业控制

    18、北京兆易创新科技股份有限公司

    简介:北京兆易创新科技股份有限公司成立于2005年,是一家以中国为总部的全球化芯片设计公司。致力于各类存储器、控制器及周边产品的设计研发。

    主营业务:NOR Flash、NAND Flash、MCU

    应用领域:消费电子、无线通信

    19、义隆电子股份有限公司

    简介:义隆电子股份有限公司于1994年成立,是一家专业晶片研发及模组化解决方案的公司,于2001年9月挂牌上市。

    主营业务:MCU、通信IC

    应用领域:平板电脑、智能手机、MID、GPS、PMP、键盘

    20、深圳市沛城电子科技有限公司

    简介:深圳市沛城电子科技有限公司成立于2000年,致力于消费类电子产品方案设计、研发及销售。

    主营业务:电源管理、分立器件、MCU、音频放大

    应用领域:照明、消费电子

    21、芯海科技(深圳)股份有限公司

    简介:芯海科技是一家专注于物联网电子领域的高性能混合信号集成电路设计企业,为国家级高新技术企业、深圳市第一批自主创新龙头企业和15家重点集成电路设计企业。

    主营业务:高精度ADC、低/微功耗MCU、混合信号SOC、工业级高可靠性ASIC设计技术

    应用领域:智慧健康(血压计、血糖仪、测脂仪,监护仪等家庭健康检测设备),智慧家居(智能插座,小家电,智慧照明等)、消费电子、仪器仪表、汽车电子

    22、深圳联华集成电路有限公司

    简介:深圳联华集成电路有限公司是专注于程序防护产品研发与生产的技术型企业。公司拥有国内外领先的程序破解技术和防破解技术,对微控制器系统设计有着深刻的理解和认识。

    主营业务:MCU

    应用领域:无线通信、可穿戴设备、消费电子

    23、华芯微特科技有限公司

    简介:华芯微特是一家由国内投资商投资,美国硅谷资深技术团队参股的无晶圆半导体集成电路公司。2009年12月北京华芯微特科技有限公司成立,公司成立后致力于通用和专用MCU研发。

    主营业务:通用/专用MCU

    应用领域:工业控制、汽车电子、医疗设备、家用电器、LED照明

    24、凌通科技股份有限公司

    简介:凌通科技成立于2004年,主要研发和销售消费性半导体产品为主,拥有IC电路设计及应用软体设计技术。
    主营业务:MCU

    应用领域:通讯、遥控器、电子字典、学习机

    25、伟诠电子股份有限公司

    简介:伟诠电子股份有限公司成立于1989年,是台湾知名的IC设计公司之一,专注于集成电路产品的设计、测试、制造及销售。

    主营业务:MCU、SoC

    应用领域:影音系统、消费电子、无线通信

    26、上海普芯达电子有限公司

    简介:上海普芯达电子有限公司成立于2008年,由目录分销商P&S(武汉力源)的创始人和IC产业资深战略投资人共同投资成立,专注于提供工业标准的MCU产品。

    主营业务:MCU

    应用领域:工业控制、消费电子

    27、福建省福芯电子科技有限公司

    简介:福芯电子成立于2014年,由福建省电子信息集团和海外Wedjat公司共同出资成立。福芯电子主要针对功率器件进行研发、生产、销售。

    主营业务:半导体功率器件

    应用领域:消费电子

    28、瑞萨电子(中国)有限公司

    简介:瑞萨电子公司,是全球首屈一指的闪存微控制器供应商,致力于微控制器、功率MOSFET和模拟IC等产品领域。

    主营业务:MCU、模拟IC、MOSFET

    应用领域:工业控制、消费电子、无线通信、汽车电子、照明

    文章来源: 满天芯

    围观 844

    汽车作为一部大型的机电一体化设备,汽车电子在汽车整体成本中的比例越来越大,其涵盖了从车身控制、动力传动、车身安全,到车内娱乐的各个方面。

    微控制器(MCU)作为汽车电子系统内部运算和处理的核心,也遍布悬挂、气囊、门控和音响等几十种次系统(Sub-System)中。由于汽车作为高速交通工具承载了对用户生命安全的保障,同时汽车经常工作在十分恶劣的环境中,其对内部电子设备的可靠性要求要远高于一般性电子产品。因此汽车电子所用的MCU与一般性产品的结构差异虽然并不很大,而一般的MCU产品由于可靠性不能符合厂商的要求而并不能被选用,这也是汽车电子产品同一般性电子产品市场的区别之一。

    技术特性需求

    CAN和LIN是最常见的车身系统总线接口,因此汽车电子类MCU除了在可靠性和抵抗恶劣环境等方面有较高要求外,还要能实现对上述总线接口的支持。

    CAN总线即控制器局域网 (Controller Area Net),是一种现场总线,最初由德国BOSCH公司为汽车监测和控制而设计,主要用于各种过程检测及控制。CAN总线分为高速CAN和低速CAN,前者主要用于动力和安全等关键性的应用,如发动机控制单元、自动变速器控制、ABS控制、安全气囊控制等;后者则通常针对一般性车身应用,如集控锁、行李箱锁、车窗,及车内灯光等。CAN总线的协议也在不断演进发展,从最早期的1.x版本已发展到目前的CAN2.0A及其扩展版CAN2.0B,其中CAN2.0B又分为主动(Active)式和被动(Passive)式。

    由于CAN总线协议的版本和分类不同,对车用MCU的要求也有差异。除了提到的协议版本,CAN总线控制器缓存和接收过滤器的数量也影响了MCU的选用。如图所示,ST的CAN控制器针对不同的应用场景,有pCAN、beCAN、bxCAN、FullCAN 和 cCAN五款不同类型。其中如beCAN、bxCAN两款适合中高端车身功能控制及低端网关;FullCAN适合引擎管理系统;cCAN则适合高端的网关和动力传动控制。

    LIN(Local Interconnect Network)总线是一种结构简单、配置灵活、成本低廉的新型低速串行总线,主要用作CAN等高速总线的辅助网络或子网络。在带宽要求不高、功能简单、实时性要求低的场合,如车身电器的控制等方面,使用LIN总线可有效的简化网络线束、降低成本、提高网络通讯效率和可靠性。如图所示,LIN主要适合于车内空调控制(Air-Conditioning Control)、车门控制模块(Door Modules)、座椅控制、智能性交换器(Smart Switches)、低成本传感器(Low-Cost Sensors)等分布式通讯应用。

    LIN的应用领域

    网关控制器

    车内网关控制器(Gateway)的作用是车内电子系统中不同网络的通讯枢纽,使分布在车身内的各个单元可实现沟通。网关一般包括总线收发器、稳压器(Regulator),以及支持多种网络协议的低成本、高效能微控制器;并广泛支持低速及高速CAN、LIN、ISO-9141和J1850等车用电子通讯接口。网关控制器设计上比较灵活,一般厂家会依据自己的需求而定制。针对不同的应用,其可以集成在车身控制单元或仪表组件等设备当中,也可以作为一个独立的模块出现。

    嵌入式闪存的作用

    MCU嵌入式内存可为满足工控机系统的需求提供保障,稳定性可得到提升,也有助于实现更低的成本和增大工作处理的弹性。因此在MCU上提供嵌入式内存,甚至整合DSP的单元,已成为目前的设计趋势。

    车用MCU嵌入式内存包含ROM、EEPROM、RAM和Flash,其中NOR Flash作为微控制器程序及数据储存的内存可使MCU具有更高的弹性,已逐渐成为目前设计的主流。由于嵌入内存而使MCU无需与外部组件进行高速串连,因此不易产生信号干扰的问题,降低了接线的复杂度,提高了稳定性。此外,嵌入式内存省去了外接元件,也可有效减少PCB尺寸,给产品设计更大的灵活性。在数据安全性方面,MCU嵌入式内存的数据保护机制可实现较高的可靠性,保证其中的数据免遭盗取。

    DSP提升设计弹性

    数字信号处理(DSP)技术是当今高科技数码产业的技术基础。从MP3随身听到航空航天等的高技术应用,DSP技术无所处不在并增长迅速。在汽车电子系统设计中,除在上文提到的在MCU嵌入内存外,为MCU加入DSP的MAC功能也可有效提升数据处理的弹性。DSP属于系统的软件功能范畴,因此可灵活地根据厂商或客户的需求进行功能改进和升级。此外,DSP与处理器(ARM、PowerPC等)相结合可实现多任务分工处理,例如可把关键的控制功能交由处理器完成,而让DSP专职进行运算方面的工作,这样可降低系统功耗并提高处理效率。

    DSP一般用于处理大量的数字信号、编解码,及通信数据分析。在汽车电子系统中,例如车载辅助路况警示安全系统,DSP可用于处理和识别复杂的路况信息并及时为司机提供实时建议和警告。

    16位车用MCU的应用场景

    MCU的处理能力与应用场合

    车载MCU的市场主要集中在8、16和32位的微控器,可按汽车电子产品的不同需求用于不同性能的场景。

    8位MCU:主要应用于车体的各个次系统,包括风扇控制、空调控制、雨刷、天窗、车窗升降、低阶仪表板、集线盒、座椅控制、门控模块等较低阶的控制功能。
      
    16位MCU:主要应用为动力传动系统,如引擎控制、齿轮与离合器控制,和电子式涡轮系统等;也适合用于底盘机构上,如悬吊系统、电子式动力方向盘、扭力分散控制,和电子帮浦、电子刹车等。
      
    32位MCU:主要应用包括仪表板控制、车身控制、多媒体信息系统(TelemaTIcs)、引擎控制,以及新兴的智能性和实时性的安全系统及动力系统,如预碰撞(Pre- crash)、自适应巡航控制(ACC)、驾驶辅助系统、电子稳定程序等安全功能,以及复杂的X-by-wire等传动功能。

    结论

    汽车电子在整体车身成本中的比重越来越显著,MCU的重要性也不断得到提升。而汽车电子有其特殊的门槛,即安全性和可靠性的考虑。因此MCU在实现较高的智能性、操控性、实时性,和弹性的同时,必须要能满足较高标准的可靠性要求,以保障行车的安全。

    围观 556

    几十年前,8位单片机(MCU)席卷业界,但现在8位MCU有让位32位架构的趋势,有行业分析师指出,32位和8位单片机还在在不断成长。不过,最早使用MCU的人对BASIC以及Microchip PIC还念念不忘,不过以最新Arduino Uno来说,这就是一个从8位到32位架构转变的典型案例。即使你现在的应用程序只需要一个8位架构,但因为所谓的“智能”设备需求增长过些日子8位就不够用了,值得庆幸的是,现在有大量开源开发工具可以让那些渴望“冒险”的激进工程师使用。

    “图1:寄存器大小是的区别系统架构的关键指标,同时也影响系统性能。”

    图1:寄存器大小是的区别系统架构的关键指标,同时也影响系统性能。

    科普---8,16,32性能大比拼

    当我们说一个单片机是8位或32位的时候到底是指什么意思呢?其实这些数指的是处理器寄存器的大小或宽度。一个8位单片机寄存器,一个处理器的基本内存单元是8位宽。在被算术逻辑单元(ALU)操作之前寄存器从RAM内存取出数据进行存储。因此,较大的寄存器意味着是我们可以操作大量的数据以减少时钟周期。一般来说,更大的寄存器给我们带来更好的计算性能,这就是为什么笔记本电脑和智能手机的中央处理单元(CPU)使用64位的架构。

    那从8位转换位32位究竟有什么优势呢?如何来权衡?要很好地理解技术和您的应用程序以确保您做出正确的设计决策。

    1、更多的内存:32位架构意味着你直接访问4Gb的内存空间而不需要采取特殊的技术,如内存分页。

    2、处理能力:新架构主要受益于更快的时钟和每个时钟周期增加的计算能力。平均来说,这意味通过32位架构可以处理更多的吞吐量以实现90到100 MIPS;而8位单片机最大只能达到大约25到30 MIPS。

    3、能耗效率:32位架构往往利用新的电路结构和制造工艺,因此,他们必须在较低工作电压下来减少晶体管漏电流。如此换来的是能耗效率处理能力的提高。这就意味着,如果你想设计一个东西一枚硬币电池就能运行几个月,那么一个32位架构芯片可能不是最好的选择。相反,8位系统因采用较大的工艺尺寸而且要在5 V电压下工作,因此适合噪声环境下的应用。

    4、成本:32位平台与8位相比通常贵在功能相似的地方(如内存数量和外围组件)。尽管一个成本差别不是那么大了,但它确实是存在,当产品量大了其差距就很明显了。

    5、封装大小:8位单片机可以应用在一些很小的封装;有些仅有6针。但微小的封装使得外部设备没有很多I / O可以进行处理。

    6、开发易用性:在这里需要您了解自己的应用程序。制造商首先倾向于将新的和更高级的功能添加到他们的32位架构。先进的机载设备,先进的I / O功能,并在32位系统上增加内存,这样可以很方便如果应用程序需要他们,尽管他们为代价来编码简单。更高级的功能可以导致不同的时钟速度,需要调整更多的配置寄存器来设置等等。相反,8位系统相对而言往往是简单和容易的代码。如果您的应用程序不需要高级特性,实际上可以坚持使用一个8位架构。8位和32位架构往往利用C语言编译器,尽管许多开发人员更喜欢在8位平台上使用汇编语言。

    32位开源平台

    过去十年,随着流行开源硬件(OSHW)的增增长,许多平台开发人员选择了8位架构,原因是基于成本以及DIP封装(许多流行的8位单片机都使用这个)变的更加用户友好。(很多32位架构是non-DIP包如表贴封装(SMD),这意味着要应用于机器。在PCB上手工焊接是非常难的,当然更不适合面包板比如PDIP。球栅阵列(BGA)封装的确是不适合焊接。唉,这些小封装使老式原型手工焊更难。

    不过,今天的重心是将OSHW只是一个教育平台逐渐变成为一个原型平台甚至消费级产品平台。因此,基于32位系统的计算和低功耗性能越来越变成理想的“创客神器”,希望从原型到生产一次搞定。此外,基于32位的芯片系统(SoC)平台变得更便宜,集成更实用的功能(如蓝牙低能量,WiFi和NFC)和变得更容易使用,制造商无疑将继续生产这些低成本开源开发板。其目的就是简单地了解工作和能够微调每个配置寄存器设置以使性能最大化,大多数厂商都愿意做这个事情。

    32位硬件平台获得越来越多的认可,许多制造商都提供这类产品包括BeagleBone、德州仪器、意法半导体、Cypress、Arduino等。为了更加简单的获取这些新平台,Mouser 开发了一个开源硬件,在这里你可以根据需求选择适合自己的器件平台。

    这里列举一小部分例子:

    l 需要安卓驱动系统的性能?查看UDOO Neo。

    l 需要一个SD卡插槽保存数据?去用一个 Intel Edison或Galileo。

    l 需要64位管脚的数字I/O?去找下BeagleBone Green。

    l 需要获取更多的I/O?试试STM32 Nucleo。

    l 想要培训更高级开发给STEM学生?这些学生习惯使用 Arduino ecosystem,那么Arduino 101板也许适合你。

    此外还有更多选择

    未来和今天

    毫无疑问,原来越多人会选择32位嵌入式平台的。正因为如此,他们也要求更高的计算机架构。虽然他们可能永远不会完全侵占8位MCU市场,但未来确实是属于32位平台。不可避免的是,随着成本下降和更能处理复杂性需求,“连接所有”将由32位平台来实现而不是8位平台。

    围观 528

    按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器)

    按按键功能分:有短按键,长按键,连续按键。打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键。按住音量键不放,音量连续加,这个就是连续按键。按住一个按键5s,系统会复位,这个是长按键。

    1、IO口按键,就是我们比较常见的一个IO接一个按键,或者是一个矩阵键盘。很多新人的处理方法可能是采样延时的方法,当年我也是这样的,如下:

    if(GETIO==low)
    {
    delay_10ms()
    if(GETIO==low)
    {
    //得到按键值
    }
    }

    这种方法虽然简单,但是有很大弊端。首先 Delay浪费很多时间,影响系统。第二,无法判断长短按键,连续按键。第三,如果这个按键是开关机按键系统在低功耗状态下,需要中断唤醒,这种方法比较容易出问题。

    所以我们一般在产品开发的过程中,采用扫描的方法,就是每隔10ms 去检测IO的状态,看是否有按键,然后去抖动,判断按键功能。参考代码如下,这段代码是之前在一个论坛看到的比我自己写的更加优秀,所以拿出来和大家分享一下,也顺便感谢一下作者。这段代码,容易修改,可以根据自己的时间需要,进行长短按键,连续按键,还有组合按键的判断。

    /* 按键滤波时间50ms, 单位10ms
    *只有连续检测到50ms状态不变才认为有效,包括弹起和按下两种事件
    */
    #define BUTTON_FILTER_TIME 5
    #define BUTTON_LONG_TIME 300 /* 持续1秒,认为长按事件 */

    /*
    每个按键对应1个全局的结构体变量。
    其成员变量是实现滤波和多种按键状态所必须的
    */
    typedef struct
    {
    /* 下面是一个函数指针,指向判断按键手否按下的函数 */
    unsigned char (*IsKeyDownFunc)(void); /* 按键按下的判断函数,1表示按下 */

    unsigned char Count; /* 滤波器计数器 */
    unsigned char FilterTime; /* 滤波时间(最大255,表示2550ms) */
    unsigned short LongCount; /* 长按计数器 */
    unsigned short LongTime; /* 按键按下持续时间, 0表示不检测长按 */
    unsigned char State; /* 按键当前状态(按下还是弹起) */
    unsigned char KeyCodeUp; /* 按键弹起的键值代码, 0表示不检测按键弹起 */
    unsigned char KeyCodeDown; /* 按键按下的键值代码, 0表示不检测按键按下 */
    unsigned char KeyCodeLong; /* 按键长按的键值代码, 0表示不检测长按 */
    unsigned char RepeatSpeed; /* 连续按键周期 */
    unsigned char RepeatCount; /* 连续按键计数器 */
    }BUTTON_T;

    typedef enum
    {
    KEY_NONE = 0, /* 0 表示按键事件 */

    KEY_DOWN_Power, /* 按键键按下 */
    KEY_UP_Power, /* 按键键弹起 */
    KEY_LONG_Power, /* 按键键长按 */

    KEY_DOWN_Power_TAMPER /* 组合键,Power键和WAKEUP键同时按下 */
    }KEY_ENUM;

    BUTTON_T s_Powerkey;
    //是否有按键按下接口函数
    unsigned char IsKeyDownUser(void)
    {if (0==GPIO_ReadInputPin(POWER_KEY_PORT, POWER_KEY_PIN) ) return 1;return 0;}

    void PanakeyHard_Init(void)
    {
    GPIO_Init (POWER_KEY_PORT, POWER_KEY_PIN, GPIO_MODE_IN_FL_NO_IT);//power key
    }
    void PanakeyVar_Init(void)
    {
    /* 初始化USER按键变量,支持按下、弹起、长按 */
    s_Powerkey.IsKeyDownFunc = IsKeyDownUser; /* 判断按键按下的函数 */
    s_Powerkey.FilterTime = BUTTON_FILTER_TIME; /* 按键滤波时间 */
    s_Powerkey.LongTime = BUTTON_LONG_TIME; /* 长按时间 */
    s_Powerkey.Count = s_Powerkey.FilterTime / 2; /* 计数器设置为滤波时间的一半 */
    s_Powerkey.State = 0; /* 按键缺省状态,0为未按下 */
    s_Powerkey.KeyCodeDown = KEY_DOWN_Power; /* 按键按下的键值代码 */
    s_Powerkey.KeyCodeUp =KEY_UP_Power; /* 按键弹起的键值代码 */
    s_Powerkey.KeyCodeLong = KEY_LONG_Power; /* 按键被持续按下的键值代码 */
    s_Powerkey.RepeatSpeed = 0; /* 按键连发的速度,0表示不支持连发 */
    s_Powerkey.RepeatCount = 0; /* 连发计数器 */
    }
    void Panakey_Init(void)
    {
    PanakeyHard_Init(); /* 初始化按键变量 */
    PanakeyVar_Init(); /* 初始化按键硬件 */
    }
    /*
    *********************************************************************************************************
    * 函 数 名: bsp_DetectButton
    * 功能说明: 检测一个按键。非阻塞状态,必须被周期性的调用。
    * 形 参:按键结构变量指针
    * 返 回 值: 无
    *********************************************************************************************************
    */
    void Button_Detect(BUTTON_T *_pBtn)
    {
    if (_pBtn->IsKeyDownFunc())
    {
    if (_pBtn->Count < _pBtn->FilterTime)
    {
    _pBtn->Count = _pBtn->FilterTime;
    }
    else if(_pBtn->Count < 2 * _pBtn->FilterTime)
    {
    _pBtn->Count++;
    }
    else
    {
    if (_pBtn->State == 0)
    {
    _pBtn->State = 1;

    /* 发送按钮按下的消息 */
    if (_pBtn->KeyCodeDown > 0)
    {
    /* 键值放入按键FIFO */
    Pannelkey_Put(_pBtn->KeyCodeDown);// 记录按键按下标志,等待释放

    }
    }

    if (_pBtn->LongTime > 0)
    {
    if (_pBtn->LongCount < _pBtn->LongTime)
    {
    /* 发送按钮持续按下的消息 */
    if (++_pBtn->LongCount == _pBtn->LongTime)
    {
    /* 键值放入按键FIFO */
    Pannelkey_Put(_pBtn->KeyCodeLong);

    }
    }
    else
    {
    if (_pBtn->RepeatSpeed > 0)
    {
    if (++_pBtn->RepeatCount >= _pBtn->RepeatSpeed)
    {
    _pBtn->RepeatCount = 0;
    /* 常按键后,每隔10ms发送1个按键 */
    Pannelkey_Put(_pBtn->KeyCodeDown);

    }
    }
    }
    }
    }
    }
    else
    {
    if(_pBtn->Count > _pBtn->FilterTime)
    {
    _pBtn->Count = _pBtn->FilterTime;
    }
    else if(_pBtn->Count != 0)
    {
    _pBtn->Count--;
    }
    else
    {
    if (_pBtn->State == 1)
    {
    _pBtn->State = 0;

    /* 发送按钮弹起的消息 */
    if (_pBtn->KeyCodeUp > 0) /*按键释放*/
    {
    /* 键值放入按键FIFO */
    Pannelkey_Put(_pBtn->KeyCodeUp);

    }
    }
    }

    _pBtn->LongCount = 0;
    _pBtn->RepeatCount = 0;
    }
    }
    //功能说明: 检测所有按键。10MS 调用一次
    void Pannelkey_Polling(void)
    {
    Button_Detect(&s_Powerkey); /* USER 键 */
    }
    void Pannelkey_Put(void)
    {

    // 定义一个队列 放入按键值
    }

    2、遥控器按键,遥控器解码的一般就有两种:脉宽调制和脉冲调制,这里就不细讲解码的过程了。这里详细解码之后,如何处理遥控器按键实现遥控器按键的长短按功能和连续按键功能。代码裁剪过,大家根据实际需要改动。其实AD按键,通过AD采样获得按键值之后,可以采取如下面的一样方法处理,提一个函数接口即可

    typedef struct
    {
    unsigned char count;//
    unsigned char LongkeyFlag;/*是否长按键,1代表是*/
    unsigned char PreKeyValue;/*按键值的一个备份,用于释放按键值*/

    }ScanKeyDef;

    #define SHORT_PRESS_TIME_IR 16 // 10ms
    #define SERIES_PRESS_TIME_IR 10
    #define LONG_PRESS_TIME_IR 22
    #define KEY_RELEASE_TIME_OUT_IR 12 // 10ms
    //提供5个接口函数,如下。
    unsigned char get_irkey(void);
    unsigned char ISSeriesKey(unsigned char temp);//按键是否需要做连续按键
    unsigned char changeSeriesKey(unsigned char temp);//转换连续按键值
    unsigned char ISLongKey(unsigned char temp);//按键是否需要做连续按键
    unsigned char changeToLongKey(unsigned char temp);//转换连续按键值

    unsigned char KeyScan(void)
    {
    unsigned char KeyValue = KEY_NONE,
    KeyValueTemp = KEY_NONE;
    static unsigned char KeyReleaseTimeCount =0;

    KeyValueTemp = get_irkey();

    if(KeyValueTemp != KEY_NONE)
    {
    ScanKeyDef.count++;
    KeyReleaseTimeCount =0;

    if(ScanKeyDef.count < LONG_PRESS_TIME_IR )
    {
    ScanKeyDef.LongkeyFlag = 0;
    if((ScanKeyDef.count == SERIES_PRESS_TIME_IR) && ISSeriesKey(KeyValueTemp)) //处理连续按键
    {
    KeyValue = changeSeriesKey ( KeyValueTemp );
    ScanKeyDef.PreKeyValue = KEY_NONE;
    }
    else if ( ScanKeyDef.count < SHORT_PRESS_TIME_IR )
    {
    ScanKeyDef.PreKeyValue = KeyValueTemp;
    }
    else
    {

    ScanKeyDef.PreKeyValue = KEY_NONE; // 无效按键
    }
    }
    else if ( ScanKeyDef.count == LONG_PRESS_TIME_IR )
    {

    if (ISLongKey(KeyValueTemp))
    {
    {
    ScanKeyDef.LongkeyFlag = 1;
    KeyValue = changeToLongKey ( KeyValueTemp );
    }
    }
    ScanKeyDef.PreKeyValue = KEY_NONE;

    }
    else if (ScanKeyDef.count > LONG_PRESS_TIME_IR )
    {

    ScanKeyDef.PreKeyValue = KEY_NONE; //无效按键
    }
    }
    else//release & no press
    {
    KeyReleaseTimeCount ++;
    if(KeyReleaseTimeCount >= KEY_RELEASE_TIME_OUT_IR)
    {

    if ( ScanKeyDef.PreKeyValue != KEY_NONE ) //释放按键值
    {
    if ( ScanKeyDef.LongkeyFlag == 0 )
    {

    KeyValue =ScanKeyDef.PreKeyValue ;
    }
    }
    ScanKeyDef.count = 0;
    ScanKeyDef.LongkeyFlag = 0;
    ScanKeyDef.PreKeyValue = KEY_NONE;

    }
    }
    return(KeyValue);
    }

    来源:互联网

    围观 678

    可编程SOC器件不但可作为电机控制、模拟测量以及直接驱动LCD显示屏的统一电路板系统用于电动自行车应用,而且还能支持电容式感应技术以取代键盘上的机械按键。此外,SOC器件还能利用内部PWM、MUX和比较器来驱动和控制三相电机,利用内部ADC和PGA来支持传感器输入电池监控,以及利用热敏电阻或RTD等温度感应器件来实现温度感应。该器件不但能直接驱动继电器,以支持刹车灯、车头灯和转向灯,而且能直接驱动LCD显示屏,以显示温度、电池状态、速度、骑行距离及各种错误/警告消息等。

    采用基于IDE的工具,可为SoC设计出各种界面和逻辑。这些工具还能提供直接可用的组件模块,可用于设计更为复杂的逻辑,如监控界面的电容式传感器、支持模拟传感器和其它输入的ADC、驱动蜂鸣器的PWM、DAC以及段式、字符或图形化LCD显示屏等。因此,利用可编程SOC,电动自行车系统的开发和生产成本能够大幅降低。

    1

    微控制器:微控制器通常用于不同传感器输入检测(如节流阀输入、温度传感器、电池输入、燃料传感器、障碍传感器等)、模数转换、输出比较组件等,并可驱动和控制三相无刷车用电机。采用电池供电的电动自行车系统需要超低功耗的微控制器。此外,微控制器也是中控锁系统的一部分,可用来与车辆中使用的各种不同外部器件进行通信。无论何时刹车,均可使用微控制器来自动停止电机旋转,从而避免电机磨损刹车片的速度超过标准的人力自行车。

    轮毂电机:通常情况下,无论有无传感器(基于霍尔效应),均可采用无刷电机实现高效可靠的运行工作。

    可再充电的铅酸/锂离子电池:电动自行车应用采用了从铅酸电池到锂电池等多种不同的电池类型。其中,可再充电的铅酸电池在电动车中的应用极其广泛。

    显示屏与键盘:通常情况下,采用带背光的LCD显示屏不但能显示温度、电池输入、速度、骑行距离及错误/警告消息等,而且还能显示脚踏板辅助系统和能量生成的等级。电动车应用中也采用基于机械按键的键盘,而且键盘还可支持保护电动车的防盗功能。

    电源管理:这个子系统可为各功能模块的运行提供电源,并监控电池工作。带比较器和分立逻辑的主机微控制器可用来管理铅酸电池。此外,这种方法也能为微控制器和用户提供关于电池的安全和关键信息。

    原理:

    目前的电动自行车系统采用16位和32位微控制器。微控制器控制和管理车辆的所有功能和特性。一旦用户打开点火开关发动电动自行车,微控制器就能获得输入,从而启动三相无刷车用电机。微控制器可接收来自用户的各种车辆输入信号,并对车辆进行相应的操控。微控制器按照用户所选择的速度驱动三相无刷车用电机,电机的速度可根据用户的加速和制动传感器输入进行变化和控制。

    微控制器采用内部或外部串行EEPROM(I2C/SPI型)来存储距离读数等数据。此外,微控制器还采用实时时钟(RTC)在显示屏上显示准确的时间。

    温度测量由板上RTD或热敏电阻型温度感应器件来实现。电动自行车系统还能利用障碍传感器在泊车时获取附近车辆的信息。燃料传感器获取引擎中的燃料信息,微控制器也可监控电池输入并将其在LCD显示屏上显示。继电器驱动电路则用于切换刹车灯、车头灯和转向灯的开/关等。

    供电部分由作为电源的可再充电铅酸或锂离子电池组成,且必须满足电池充电器的规定。电池输入向下转换为DC电压,以便为微控制器和其它电路提供动力。点火开关则可启用或禁用板上稳压器。此外,供电部分还可提供电池、过流、过热及启动故障状态保护电路等多种保护功能。OEM厂商也会对手机等外部设备的充电做出相应规定。

    2

    电动自行车系统的实现

    为给出电动自行车系统的实际实现方案,本文介绍了一款基于赛普拉斯PSoC 4的设计。PSoC 4器件完美集成了带数字可编程逻辑的微控制器、高性能模数转换、带比较器模式的运算放大器以及标准的通信和时序外设等。微控制器为32位的ARM Cortex M0,工作频率高达48 MHz,并可提供最大32 KB的闪存和最大4 KB的SRAM以及2 KB的内部EEPROM.

    该实现方案采用板上6个P型通道(P-Channel)MOSFET和门驱动器电路来驱动三相无刷电机。PSoC 4器件带有内置PWM、时钟、多路转换器和比较器,可用来驱动和控制三相无刷电机。此外,内置的16位PWM将用于驱动控制电机的FET门驱动器电路。而 PWM的占空比根据用户设置所需的速度而各不相同。

    PSoC4带有内部运算放大器、PGA、比较器和12位1MSPS SAR ADC,可提供差动和单端模式,包括采样保持(S/H)功能。ADC可通过改变PWM占空比来控制电机速度,并测量不同的传感器输入以满足电池监控、低成本温度感应、障碍感应和燃料感应等需求。这样系统就无需采用任何外部放大器、ADC或比较器。

    利用两个电流DAC(IDAC),该系统可具备通用感应功能,且能够利用任何引脚上的电容式感应技术。PSoC 4架构支持电容式感应组件,该组件同时支持手动和自动调校。采用电容式界面可帮助整个电动自行车系统实现防水性,同时也能直接驱动继电器,从而充分满足喇叭、刹车灯、车头灯、转向灯和LCD显示屏等需求。该器件的工作电压范围介于1.71V到5.5V之间,能与其它外部外设轻松连接,从而实现更多功能。此外,PSoC 4还支持两个独立的在运行中可重配置串行通信模块(SCB),此模块带可重配置的I2C、SPI或UART功能,可用于内外部外设通信。

    该实现方案采用可再充电的铅酸或锂离子电池作为电源。输入电压通过板上降压稳压器进行下变频转换。1.71 V的较低工作电压和超低功耗运行,再加上冬眠和深度休眠模式,可支持唤醒时间和功耗折中方案,从而实现更长的电池使用寿命。

    采用PSoC Creator IDE工具,我们能通过随时可用的组件模块设计出所有的接口和逻辑,包括面向模拟传感器和其它输入的SARADC和PGA;面向电机驱动应用的PWM、 CLK、MUX和比较器等组件;面向直接驱动字符和段式LCD的组件;面向电动自行车应用中CAN协议接口的CAN组件;以及通过内部系统时钟进行实时测量、从而让系统不再需要外部时钟/振荡器电路的RTC组件等。

    此外,PSoC Creator还支持工程师访问包括集成编译器工具链、RTOSes和量产编程器在内的完整的工具生态系统。有了PSoC Creator,开发人员就可利用分层原理图设计创建并共享用户自定义的定制外设。然后,他们能对所选定的组件实现自动布局布线,并集成简单的粘接逻辑 (通常位于分立多路转换器中)。

    过流保护用于关闭电机驱动PWM,因而可停止电机运行。PSoC 4器件采用基于比较器的PWM Kill信号触发,可在检测到过流情况时终止电机驱动。该模块的输入来自总线电流,其截止参考可设为电机消耗的最大电流。总线电流输入馈送到比较器和可配置的截止参考,并由DAC进行设置。如果总线电流低于参考阈值,那么比较器输出设为高。比较器输出连接到PWM的“KILL”信号输入。当“KILL”输入为高时,PWM输出关闭,从而可避免电机受损。该完整模块的实现方案将采用PSoC creator组件,且无需设计人员编写的任何固件。

    无传感器的电机控制

    无传感器的电机控制不需要霍尔传感器,而是采用反电动势(back-EMF)过零检测技术来控制电机的运动。当电机旋转时,每个绕组生成的电压称为与绕组供电主电压相反的反电动势电压。反电动势的极性与绕组激励所用电压的方向相反,并与电机的转速成正比。

    3

    在图3中,三相反电动势信号终止而DC总线扩展并路由到PSoC.PSoC将采用多路复用器切换到比较器的终止输入,并将其与DC总线电压进行比较。级联的数字逻辑将过滤出PWM信号,以获得真正的过零信号。微控制器将根据该信息决定换向。

    可选的电流控制将被应用于PWM输出控制,从而对电机电流进行调节。此内环以比较器为基础:反馈总线电流与12位DAC提供的参考电流值进行比较。改变DAC输出将修改输出电流值。

    基于传感器的(霍尔效应)电机控制

    基于传感器的无刷电机控制采用霍尔传感器输入来检测转子位置,进而控制电机的运动。它为微控制器提供霍尔传感器输入,并作为闭环系统工作,这有助于实现较长驱动的自动速度锁定。

    设计挑战

    高性能智能微控制器需要更高MIPS性能的CPU内核、更快速的ADC(》= 500Ksps 10位)、内置闪存和SRAM存储器、内置EEPROM、模拟和数字外设来执行高性能模拟测量、CAN接口、三相电机控制、LCD驱动、低功耗运行、 RTC、不同外部协议接口等关键功能。

    该系统可采用低成本前面板设计,实现按键和LED/LCD界面等不同特性。此外,电容式感应技术可用于在前面板上实现按键、滑条和接近传感器。在前面板上利用邻近的LED(PWM型)满足电容式感应性能要求(如信噪比等),这对于系统设计人员来说可能是一大设计挑战。

    选择具有低Ron和低栅电容的Power MOSFET正是驱动三相电机所必需的。采用高功率MOSFET驱动电路设计电路板以及处理电池输入的较高板上电流是电路板设计人员面临的另一大挑战。由于该系统涉及机电构造问题,要设计出一款低成本的紧凑型机电系统极具挑战,而且还要让最终设计通过认证。此外,电动自行车系统在设计时需要考虑一次充电能行驶更长里程的问题。

    支持恢复机制的故障检测是所有汽车应用都不可或缺的。而且,具有电池保护、过流、过热和启动故障状态保护功能的电源设计也是一大必要条件。

    此外,开发人员可能还希望采用一次性可编程(OTP)的器件来防止竞争对手和黑客对固件实施逆向工程。

    系统局限性

    PSoC 4支持电容式感应技术,可通过触摸操控的键盘取代机械按键。这不仅可减少由机械按键造成的故障几率,同时还可提高产品的可靠性。PSoC Creator支持CapSense SmartSense组件,该组件能自动调校电容式感应按键和滑条的敏感度,从而使开发人员无需再进行手动调校。此外,电容式感应还能提高最终系统的防水性。

    在前面板上实现的触摸屏设计取代了LCD显示屏和键盘,这可为用户提供更好的用户界面和更高的灵活性。系统还可添加连接iPod/iPhone等外部设备的接口,通过UART或USB接口实现与媒体播放器的通信,从而支持播放音乐、控制播放列表和设备充电等功能。

    故障分析和返回材料:电路板上内外部接口数量的增加必然会让入侵者获得更多途径来对系统实施破坏。这也是嵌入式系统面临的一个最大局限性问题。

    在汽车应用领域中所使用的电动自行车系统目前是采用微控制器来实现。PSoC完美结合了微控制器和ASIC.采用基于PSoC的电动自行车解决方案,可帮助我们降低汽车产业的整体产品成本(通过减少BOM成本)和项目开发成本

    来源:智能化网

    围观 359

    调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试出发到更先进的仪器跟踪技术。

    技巧1# - 传统的断点调试

    每个开发人员都熟悉传统的调试技术,设置断点、执行代码,然后单步调试代码进行监视,同时监视寄存器和变量值。断点调试是我看到的使用最多的技术。然而,结果却不甚乐观,因为断点调试的效率较低,通常会产生次优的结果。

    既然如此,为什么大家还如此频繁地使用断点调试呢?主要原因似乎是断点调试便于使用,易于理解,并且开发人员都乐观地认为,对于工作而言,断点是正确的工具。这种乐观需要校验。断点有可能破坏系统的实时性能,同时会将开发者吸进一个黑洞,使其无休止地去单步执行代码,盲目地寻找问题的一种解决方法。

    技巧2#- IDE值图

    如今,几乎所有的现代调试器和IDE都允许开发者监视存储在内存中的变量值。开发人员可以选择内存位置以及值刷新率,然后启动调试会话。一些IDE自身就有能力监视内置到IDE的值,而另外一些IDE则需要依靠外部软件。

    值监测非常有用,如果将监测到的数据与图形化表示关联到一起,其带来的价值则更大。对实时的数据绘制值图对于发现意想不到的变化和验证特定波形的生成极其有用。例如,一个三相无刷直流电机(BLDC motor)。开发人员如果想要监测每个电机支架的电流和电压,则需要驱动电机所形成的非常具体的波形。绘制每个电机支架电流和电压能够让开发人员实时看到发生的事情。

    技巧3#-从printf到SWO

    在高端的ARM Cortex-M系列配件中,如M3/M4,它为开发人员提供了额外的调试能力,即串行线查看器(Serial Wire Viewer,SWV)。SWV还包括除串行线输出(SWO)以外的标准串行线调试。SWO可以用来做很酷的东西,如程序检索计数器,事件计数器,及数据追踪等。开发者还可以对它们进行自定义,设置自己想要在SWO中传送的信息。

    许多开发者为了从他们的嵌入式系统中获取调试信息通常会设置printf。实际上则并不是在单片机中使用串口引脚,而是开发人员可以使用SWO通过调试器重新路由printf信息。以这种方式使用调试器可以保存专用串行接口的需要,同时消除了开发UART和USB设备的时间,效率更高。现在通过SWO和调试硬件将最初被应用程序所使用的开销卸去,缩减了那些有可能被应用程序代码使用的宝贵的时钟周期。

    技巧4#-RTOS跟踪

    试图透过表像看清一个实时操作系统中(RTOS)的本质可以说是相当具有挑战性。开发者并不想扰乱实时系统的性能,但仍然需要一些方法来了解系统的行为。这也是Blinky LED经常使用的把戏,但最近开发者的工具箱中增加了更多惊人的跟踪工具。例如免费的商用RTOS工具,如TraceX、SystemView和tracealyzer等等。

    当RTOS闲置,或是有任务进入和退出时,跟踪工具允许开发者进行追踪分析。开发人员可以监控系统的异常,响应时间,执行时间,以及正确开发一个嵌入式系统所需的许多其他关键细节。RTOS跟踪工具最酷的功能是它们能够展示系统内部发生了什么。实时地或是在日志文件中进行审查和时序图监视,能够让开发者确定一个置信水平,用以估量系统是否能够按预期正常运行,或者帮助他们发现一些小问题,否则将花费大量的时间去寻找。

    技巧5 #- 使用指令追踪技术(ETM / ETB / ETM)

    有时开发人员面临的调试问题,只是在处理器中所能想象到的最低层面的问题。跟踪技术的存在,可以监视处理器执行的单个指令。在测试和验证软件时这种低水平跟踪对于监测分支覆盖非常有用。用于指令跟踪的调试工具不同于那些开发人员使用的串行线查看,而且成本略高。

    结束语

    调试工具和技术在过去几年里迅速发展,特别是高端微控制器。一般来讲,工程师都是视觉型生物,工具供应商正在寻找方法以刺激视觉的方式来揭示一个实时系统究竟发生什么。配置调试工具可能需要做一些前期工作,但是在设计上多花一点时间可以换来更少的调试时间,确实是一笔非常值得的时间投资。开发人员至少应该熟悉不同的调试工具和可用的功能,以便在出现问题,系统需要调试时,他们可以选择合适的工具完成任务。你有用过其它可以帮助工程师更快、更有效率地调试他们系统的技术么?

    原文链接:Debugging the Cortex-M MCU

    作者:Jacob Beningo

    译者:刘帝伟 审校:刘翔宇

    责编:周建丁(zhoujd@csdn.net

    文章来源: 极客头条

    围观 400

    页面

    订阅 RSS - MCU