当前位置:看商机 > 行业资讯 > 资讯 > 教你如何在短时间内快速掌握一款新的MCU

教你如何在短时间内快速掌握一款新的MCU

发布时间:2020-12-28 11:13:03 点击次数:431

任何MCU,其基本原理和功能都是相似的,唯一的区别是外围功能模块,命令系统等的配置和数目。关于命令系统,尽管形式似乎有很大不同,但实质上只是记号的区别。意义,要完成的功能和寻址方法基本相似,因此对于MCU,应主要从以下几个方面进行理解和掌握:

*MCU的功能:要了解MCU,首先需要了解其ROM空间,RAM空间,IO口quantity,定时器量子和时间以及所提供的外围功能模块(PeripheralCircuit),中断源,工作电压和功耗等。

*了解完这些MCU功能之后,下一步就是将所选的MCU功能与实际项目开发所需的功能进行比较,并确保当前需要这些资源,而在本项目中未使用这些资源。对于需要在项目中使用但未提供所选MCU的功能,您需要仔细了解MCU的相关信息才能间接实现。例如,已开发的项目需要链接到pcCOM口进行通信,并且所选的MCU不提供UART口,可以考虑使用外部中断来实现;

*对于项目开发所需的资源,您需要仔细理解和阅读手册,并且可以忽略或浏览不必需的功能模块。对于MCUlearning,应用程序是关键和主要目的。

*在明确MCU的相关功能后,您可以开始下一步编程。对于初次使用MCU的初学者或设计师,他们在MCU的功能描述中可能会相遇很多歧义。对于此类疑问,有两种解决方法,一种是编写特别的验证程序以了解材质中描述的功能;另一种可以暂时性忽略,根据您当前的理解编写程序设计,调试时可以进行修改和完善。前一种方法适用于时间相对宽松的项目和初学者,而后一种方法适用适用于具有一定MCUdevelopment经验的人员或项目进度紧急的状况;

*绝不花时间去理解命令系统。指示系统只是逻辑描述的象征。在编程过程中,只能根据自己的逻辑和程序的逻辑要求检视相关指示。随着编程的进行,您将愈发通晓指示系统,甚至会不自觉地记住它。

MCU的基本功能:

对于大多数MCU,以下功能是最常见和最基本的。对于不同的MCU,描述方法可能不同,但本质上是相同的:

*Timer(定时器):Timer的类型很多,但可以概括为两类:一类是Timer,具有固定的时间间隔,即其时间由系统设置。用户程序不可控。系统仅提供几个固定的时间间隔供用户程序选择,例如32hz,16hz,8Hz等。此类Timer在4位MCU中更加常见,因此可以用来实现时钟,计时等相关功能;另一个类型是ProgrammableTimer(programmable定时器),顾名思义,这种Timer的时间可以由用户程序控制。包括:时钟源选择,分频数(Prescale)选择和预设编号设置等。一些MCU同时具有全部三个,有些可能是其中的一个或两个。这种类型的Timer应用程序十分灵活,实际使用也在不停变动。最常见的应用之一是使用它来实现PWM的输出(稍后将介绍特定的应用)。由于可以自由选择时钟源,因此Timer通常与EventCounter结合使用(event计数器);

*IO口:任何MCU都有一定数目的io端口,如果没有io端口,则MCU将失掉与外界的通信通道,根据io端口的可配置性可以分成以下几种类型:

1.纯输入或纯输出端口:此类io端口具有MCU硬件设计决定,只能输入或输出,并且软件不能用于实时设置;

2.直接读写io端口:MCS-51等io端口属于此类io端口。执行readioport命令时为输入端口;当执行writeioport命令时,它自动是输出端口

3.通过程序编程来设置输入和输出方向:此类io端口的输入或输出由程序根据实际需要设置,应用更为灵活,可以实现某些总线级的应用。

例如I2C总线,各种LCD,ledDriver控制总线等;

对于io端口的使用,必须铭记一个着重:对于输入端口,必须有一个明晰的电平信号以确保它不会浮动(可以通过添加上拉或下拉电阻器来实现);对于输出端口,其输出状态级别必须考虑其外部连接,并且应确保在Standby或静态下没有源电流或灌电流。

*外部中断:外部中断也是大多数MCU的基本功能。它通常用于实时信号触发,数据采样和状态检测。中断方法包括上升沿,降低沿触发和电平触发。外部中断通常通过输入端口实现。如果它是io端口,则只有在将其设置为输入时才能打开其中断功能。如果是输出端口,则外部中断功能会自动关闭(ATMEL的ATiny系列有一些(例外,该中断功能也可以在输出端口触发)。外部中断的应用如下如下:

**外部触发信号的检测:一种基于实时要求,例如晶闸管的控制,突发信号的检测等;二是省电的需要;

**信号频率的测量;为了确保信号不会遗失,外部中断是最完美的选择。

**数据解码:在远程控制应用领域,为了减低设计成本,常常需要使用软件对各种编码数据进行解码,例如Manchester和PWM编码解码;

**按钮检测和系统唤醒:对于进入Sleep状态的MCU,通常需要通过外部中断将其唤醒。最基本的形式是按钮,并且级别变化是通过按钮的动作生成的;

*通讯接口:MCU提供的通讯接口一般包括SPI接口,UART,I2C等接口,描述如下:

**SPI接口:这种类型的接口是大多数MCU提供的最基本的通信方法。其数据传输由同步时钟控制。信号包括:SDI(串行数据输入),SDO(串行数据输出),SCLK(串行时钟)和Ready信号;在某些情形下,可能没有Ready信号;这样的接口可以在Master或Slave方法中工作,流行的说法是看谁提供时钟信号,提供时钟的一方是Master,对方是Slaver;

**UART(Universal Asynchronous Receive Transmit):这是最基本的异步传输接口。其信号线只有Rx和Tx。基本数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even,Oddor None)+StopBit(1〜2Baud)。数据称作Rate波特率(MCU)。对于大多数Stop,数据的长度,数据校验方法(奇校验,偶校验或无校验),终止位的长度(Bit位)和BaudRate可以通过程序编程灵活设置。这种类型的接口最常见的方法是与pc的串行端口通信。

**I2Cinterface:I2C是Philips开发的一种数据传输协商,还使用2种信号来实现:sdat(串行数据输入和输出)和SCLK(串行时钟),最大的优点是该总线上可以连接多个装置,可以通过地址进行识别和访问;I2C总线的最大优点之一是使用软件来实现IO口十分简便,其传输数据速率全然由sclk控制,与UART接口不同,它可以快也可以慢。有严苛的费率要求。

*Watchdog(看门狗定时器):Watchdog也是大多数MCU的基本配置(某些4位MCU可能没有此功能),大多数MCUWatchdog只能容许该程序重置它但不关闭它(某些在刻录程序时设置,例如MicrochipPIC系列MCU),而一些MCU由特定方法确定是不是打开,例如Samsung系列的KS57系列,只要程序访问Watchdog寄存器,它就会自动打开并且不能再度关闭。通常来说,watchdog的复位时间可以由程序设置。Watchdog的最基本应用是为MCU提供由于意外故障而分崩离析的自我恢复功能。

MCU程序编写:

MCU程序的编写与pc下程序的编写之间存在很大歧异。尽管基于c的MCU开发工具变得更为流行,但是对于高效的程序代码和爱好使用汇编语言的设计师来说,汇编语言依然是最简练,最有效的编程语言。,基本框架可以说大体相同,通常分成初始化部分(这是MCU编程和pc之间的最大区别),主程序循环主体和中断处理程序。(请参阅图1a和b),解释如下:

*初始化:对于所有MCU程序的设计,分娩是最基本,最关键的步骤,通常包括以下步骤:

**屏蔽所有中断并初始化堆栈指针:初始化部分通常不愿意时有发生任何中断。

**扫除RAM区域并显示系统的Memory:尽管有时不一定全然必需,但提议从可靠性和一致性的出发点养成不错的编程习惯,更是是防止意外错误;

**IO口的初始化:根据项目的应用需求,设置相关io端口的输入和输出模式。对于输入端口,需要设置上拉或下拉电阻。对于输出端口,必须设置其输出level输出,以防止不必需的错误;

**中断设置:对于项目中需要使用的所有中断源,应将其打开并设置中断的触发条件,对于未使用的冗余中断,必须将其关闭;

**其他功能模块的初始化:对于所有需要使用的MCU外围功能模块,必须根据项目的应用需求进行相应的设置,例如UART通讯,需要设置BaudRate,数据长度,StopBit的检查方法和长度等。对于ProgrammerTimer,必须设置时钟源,分频和ReloadData等。

**参数化:在完成MCU的硬件和资源后,下一步是初始化程序中使用的一些变量和数据。这部分的初始化需要基于特定的项目和程序。设计的整体配置。对于某些使用EEPROM保留项目预制编号的应用程序,提议在初始化期间将相关数据复制到MCURAM以提高程序访问数据的速度并下降功耗系统的法则(原则上访问外部EEPROM会增加电源的功耗)。

*主程序循环主体:大多数MCU长时间不间断运转,因此主程序主体基本上是在循环模式下设计的。对于具有多种工作模式的应用程序,可能存在多个循环体,并通过状态标志互相切换。对于主程序体,通常安排以下模块:

**计算程序:计算程序通常很耗时,因此强烈反对在任何中断中进行处理,更是是乘法和除法演算;

**实时需求不高或没有实时需求的处理程序;

**显示传输程序:主要用于含有外部ledLCDDriver的应用;

*中断处理程序:中断程序主要用于处理对实时性要求较高的任务和事件,例如外部突发信号的检测,按钮的检测和处理,计时计数,led显示扫描等。,中断程序应尽量简便且简要。对于不需要实时处理的功能,可以在中断中设置触发标志,然后主程序将执行特定的事务,这十分最主要。特别是对于低功耗和低速度MCU,有必要确保对所有中断的马上响应。

*对于不同任务主体的安排,不同的MCU具有不同的处理方法,例如对于低速,低功耗的MCU(Fosc=32768Hz)应用程序,考虑到此类项目都是手持装置并且使用平常lcd显示屏,对按钮的响应以及对显示屏的响应都要求很高的实时性能。响应于此,定时中断通常用于处理按钮动作和数据显示。对于高速MCU,例如Fosc>1mhz应用程序,因为此时MCU有足够的时间执行主程序循环。因此,您只能在相应的中断中设置各种触发标志,并将所有主程序主体中要执行的任务;

*在MCU的编程中,需要特别留意的一件事是防止在中断与主体程序主体中同时访问或设置相同变量或数据的状况。一种有效性的预防方法是安排在模块中处理此类数据,并通过断定触发标志确定是不是对数据进行相关操作;而在其他程序主体(主要是中断)中,仅需在处理位置设置触发标志即可处理数据。――这确保了数据的执行是可预测的且唯一的。