“三步走”快速掌握一款MCU
2018-02-07 10:39:02閱讀量:16850來源:立創(chuàng)商城
任何一款MCU,其基本原理和功能都是大同小異,所不同的只是其外圍功能模塊的配置及數(shù)量、指令系統(tǒng)等。對(duì)于指令系統(tǒng),雖然形式上看似千差萬別,但實(shí)際上只是符號(hào)的不同,其所代表的含義、所要完成的功能和尋址方式基本上是類似的。
因此,對(duì)于任何一款MCU,主要應(yīng)從如下的幾個(gè)方面來理解和掌握:
了解MCU的特點(diǎn)
要了解一款MCU,首先需要知道就是其ROM空間、RAM空間、IO口數(shù)量、定時(shí)器數(shù)量和定時(shí)方式、所提供的外圍功能模塊、中斷源、工作電壓及功耗等等。
了解這些后,接下來第一步就是將所選MCU的功能與實(shí)際項(xiàng)目開發(fā)的要求的功能進(jìn)行對(duì)比,明確哪些資源是目前所需要的,哪些是本項(xiàng)目所用不到的。對(duì)于項(xiàng)目中需要用到的而所選MCU不提供的功能,則需要認(rèn)真理解MCU的相關(guān)資料,以求用間接的方法來實(shí)現(xiàn),例如,要實(shí)現(xiàn)電流輸出功能,而單片機(jī)沒有DA資源,則需要外加DA芯片或者選擇帶串口的電流輸出芯片。
對(duì)于項(xiàng)目開發(fā)需要用到的資源,則需要認(rèn)真閱讀datasheet上對(duì)應(yīng)的內(nèi)容,而對(duì)于不需要的功能模塊則可以忽略或?yàn)g覽即可。對(duì)于MCU學(xué)習(xí)來講,應(yīng)用才是關(guān)鍵,要在應(yīng)用中學(xué)習(xí),而不是為了學(xué)習(xí)而學(xué)習(xí)。
明確了MCU的相關(guān)功能后,接下來就可以開始編程了。對(duì)于初學(xué)者或初次使用此款MCU的設(shè)計(jì)者來說,可能會(huì)遇到很多對(duì)MCU的功能描述不明確的地方,對(duì)于此類問題,可以通過兩種方法來解決,一種是編寫特別的驗(yàn)證程序來理解資料所述的功能;另一種則可以暫時(shí)忽略,程序設(shè)計(jì)中則按照自己目前的理解來編寫,留到調(diào)試時(shí)去修改和完善。
前一種方法適用于時(shí)間較寬松的項(xiàng)目和初學(xué)者,而后一種方法則適合于具有一定MCU開發(fā)經(jīng)驗(yàn)的人或項(xiàng)目進(jìn)度較緊迫的情況;指令系統(tǒng)不建議專門花時(shí)間去理解。指令系統(tǒng)只是一種邏輯描述的符號(hào),只有在編程時(shí)根據(jù)自己的邏輯和程序的邏輯要求來查看相關(guān)的指令即可,而且隨著編程的進(jìn)行,對(duì)指令系統(tǒng)也會(huì)越來越熟練,甚至可以不自覺地記憶下來。
熟悉MCU的基本功能
對(duì)于絕大多數(shù)MCU,下列功能是最普遍也是最基本的,針對(duì)不同的MCU,其描述的方式可能會(huì)有區(qū)別,但本質(zhì)上是基本相同的:
Timer(定時(shí)器):Timer的種類雖然比較多,但可歸納為兩大類:一類是固定時(shí)間間隔的Timer,即其定時(shí)的時(shí)間是由系統(tǒng)設(shè)定的,用戶程序不可控制,系統(tǒng)只提供幾種固定的時(shí)間間隔給用戶程序進(jìn)行選擇,如32Hz,16Hz,8Hz等,因此可以用來實(shí)現(xiàn)時(shí)鐘、計(jì)時(shí)等相關(guān)的功能,該類不常見;另一類則是Programmable Timer(可編程定時(shí)器),顧名思義,該類Timer的定時(shí)時(shí)間是可以由用戶的程序來控制的,控制的方式包括:時(shí)鐘源的選擇、分頻數(shù)(Prescale)選擇及預(yù)制數(shù)的設(shè)定等。此類Timer應(yīng)用非常靈活,實(shí)際的使用也千變?nèi)f化,比如實(shí)現(xiàn)計(jì)數(shù)、定時(shí)、或者輸出PWM等。由于時(shí)鐘源可以自由選擇,因此,此類Timer一般均與Event Counter(事件計(jì)數(shù)器)合在一起。
IO口:任何MCU都具有一定數(shù)量的IO口,沒有IO口,MCU就失去了與外部溝通的渠道。根據(jù)IO口的可配置情況,可以分為如下幾種類型:
① 純輸入或純輸出口:此類IO口有MCU硬件設(shè)計(jì)決定,只能是輸入或輸出,不可用軟件來進(jìn)行實(shí)時(shí)的設(shè)定,不常見;
② 直接讀寫IO口:如51單片機(jī)的IO口就屬于此類IO口。當(dāng)執(zhí)行讀IO口指令時(shí),就是輸入口;當(dāng)執(zhí)行寫IO口指令則自動(dòng)為輸出口;
③ 可設(shè)定方向的IO口:此類IO口的輸入或輸出是通過寄存器來配置的,應(yīng)用比較靈活;
④ 功能性IO口:此類IO口是可以復(fù)用的,比如第二功能是IIC、SPI、AD、UART/USART等,可以通過寄存器來實(shí)現(xiàn)復(fù)用功能,這類IO口可以通過專用芯片實(shí)現(xiàn)較為復(fù)雜的特定功能,比如說通過MAX232實(shí)現(xiàn)RS232通訊、通過AT24C02實(shí)現(xiàn)掉電存儲(chǔ)等;
對(duì)于IO口的使用,重要的一點(diǎn)必須牢記的是:對(duì)于輸入口,必須有明確的電平信號(hào),確保不能浮空(可以通過增加上拉或下拉電阻來實(shí)現(xiàn));而對(duì)于輸出口,其輸出的狀態(tài)的電平必須考慮其外部的連接情況,比如說驅(qū)動(dòng)能力。
外部中斷:外部中斷也是絕大多數(shù)MCU所具有的基本功能,一般用于信號(hào)的實(shí)時(shí)觸發(fā),中斷的方式有上升沿、下降沿觸發(fā)和電平觸發(fā)等。外部中斷一般通過輸入口來實(shí)現(xiàn),若為IO口,則只有設(shè)為輸入時(shí)其中斷功能才會(huì)開啟;若為輸出口,則外部中斷功能將自動(dòng)關(guān)閉。外部中斷的應(yīng)用如下:
① 外部觸發(fā)信號(hào)的檢測(cè):一種是基于實(shí)時(shí)性的要求,比如可控硅的控制,突發(fā)性信號(hào)的檢測(cè)等;而另一種情況則是省電的需要;
② 信號(hào)頻率的測(cè)量:可以通過上升沿或者下降沿觸發(fā)中斷;
③ 按鍵的檢測(cè)和系統(tǒng)的喚醒:對(duì)于進(jìn)入休眠狀態(tài)的MCU,一般需要通過外部中斷來進(jìn)行喚醒,最基本的形式則是按鍵,通過按鍵的動(dòng)作來產(chǎn)生電平的變化;
通訊接口:MCU所提供的通訊接口一般包括SPI接口,UART,I2C接口等,其分別描述如下:
① SPI接口:此類接口是絕大多數(shù)MCU都提供的一種最基本通訊方式,其數(shù)據(jù)傳輸采用同步時(shí)鐘來控制,信號(hào)包括:SDI(串行數(shù)據(jù)輸入)、SDO(串行數(shù)據(jù)輸出)、SCLK(串行時(shí)鐘)、CS(可選);此類接口可以工作在Master方式或Slave方式下,通俗說法就是看誰(shuí)提供時(shí)鐘信號(hào),提供時(shí)鐘的一方為Master,相反的一方則為Slaver,可實(shí)現(xiàn)全雙工通訊;
② UART/USART:屬于最基本的一種異步/同步傳輸接口,其信號(hào)線只有Rx和Tx兩條,基本的數(shù)據(jù)格式為:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位數(shù)據(jù)所占的時(shí)間稱為Baud Rate(波特率)。對(duì)于大多數(shù)的MCU來講,數(shù)據(jù)為的長(zhǎng)度、數(shù)據(jù)校驗(yàn)方式(奇校驗(yàn)、偶校驗(yàn)或無校驗(yàn))、停止位(Stop Bit)的長(zhǎng)度及Baud Rate是可以通過程序編程進(jìn)行靈活設(shè)定。此類接口最常用的方式就是實(shí)現(xiàn)RS232通訊或者RS485通訊。
③ I2C接口:I2C是由Philips開發(fā)的一種數(shù)據(jù)傳輸協(xié)議,同樣采用2根信號(hào)來實(shí)現(xiàn):SDAT(串行數(shù)據(jù)輸入輸出)和SCLK(串行時(shí)鐘)。其最大的好處是可以在此總線上掛接多個(gè)設(shè)備,通過地址來進(jìn)行識(shí)別和訪問;I2C總線的一個(gè)最大的好處就是非常方便用軟件通過IO口(片上資源或者普通IO口模擬)來實(shí)現(xiàn),其通訊方式是半雙工。
Watchdog(看門狗定時(shí)器):Watchdog也是絕大多數(shù)MCU的一種基本配置,大多數(shù)的MCU的Watchdog只能允許程序?qū)ζ溥M(jìn)行復(fù)位而不能對(duì)其關(guān)閉(有的是在程序燒入時(shí)來設(shè)定的,如Microchip PIC系列MCU),而有的MCU則是通過特定的方式來決定其是否打開,如STM32系列,只要程序訪問了Watchdog寄存器,就自動(dòng)開啟且不能再被關(guān)閉。一般而言watchdog的復(fù)位時(shí)間是可以程序來設(shè)定的。Watchdog的最基本的應(yīng)用是為MCU因?yàn)橐馔獾墓收隙鴮?dǎo)致死機(jī)提供了一種自動(dòng)復(fù)位的功能。
MCU程序的編寫
對(duì)于MCU的程序編寫,其基本的框架可以說是大體一致的,一般分為初始化部分(這是MCU程序設(shè)計(jì)與PC最大的不同),主程序循環(huán)體和中斷處理程序三大部分,其分別說明如下:
初始化:對(duì)于所有的MCU程序的設(shè)計(jì)來講,初始化是最基本也是最重要的一步,一般包括如下內(nèi)容:
① IO口的初始化:根據(jù)項(xiàng)目的應(yīng)用的要求,設(shè)定相關(guān)IO口的輸入輸出方式,對(duì)與輸入口,需要設(shè)定其上拉或下拉電阻;對(duì)于輸出口,則必須設(shè)定其出世的電平輸出,以防出現(xiàn)不必要的錯(cuò)誤;
② 中斷的設(shè)置:對(duì)于所有項(xiàng)目需要用到的中斷源,應(yīng)該給予開啟并設(shè)定中斷的觸發(fā)條件,而對(duì)于不使用的多余的中斷,則必須給予關(guān)閉;
③ 其他功能模塊的初始化:對(duì)于所有需要用到的MCU的外圍功能模塊,必須按項(xiàng)目的應(yīng)用的要求進(jìn)行相應(yīng)的設(shè)置,如UART的通訊,需要設(shè)定Baud Rate,數(shù)據(jù)長(zhǎng)度,校驗(yàn)方式和Stop Bit的長(zhǎng)度等,而對(duì)于定時(shí)器則必須設(shè)置其時(shí)鐘源,分頻數(shù)及初值等;
④ 變量的初始化:完成了MCU的硬件和資源的初始化后,接下來就是對(duì)程序中使用到的一些變量和數(shù)據(jù)的初始化設(shè)置,這一部分的初始化需要根據(jù)具體的項(xiàng)目及程序的總體安排來設(shè)計(jì)。比如說讀取EEPROM中存儲(chǔ)的掉電保存輸出等;
主程序循環(huán)體:用戶編寫的程序多是周而復(fù)始循環(huán)執(zhí)行的,因此其主程序體基本上都是以while循環(huán)的方式來設(shè)計(jì)。
中斷處理程序:中斷函數(shù)是一種特殊的函數(shù),只有相應(yīng)中斷被觸發(fā)后MCU才去執(zhí)行該部分函數(shù)。51單片機(jī)的中斷函數(shù)是通過interrupt關(guān)鍵字來實(shí)現(xiàn)的,實(shí)例寫法如下:
void Timer_Isr() interrupt 0
interrupt是關(guān)鍵字,數(shù)字0是中斷向量號(hào)。
對(duì)于32位的單片機(jī)而言,中斷入口函數(shù)都在.s啟動(dòng)函數(shù)里注冊(cè)好了,實(shí)例寫法如下(以STM32單片機(jī)為例):
void TIM2_IRQHandler()
下圖是.s啟動(dòng)函數(shù)中截取的中斷函數(shù)句柄:
單片機(jī)是一門工具,以應(yīng)用為主,所以說了這么多,一句話來總結(jié):要學(xué)好單片機(jī)必須動(dòng)手多加練習(xí)。

L7805CV-DG/線性穩(wěn)壓器(LDO) | 0.5401 | |
AMS1117-3.3/線性穩(wěn)壓器(LDO) | 0.1237 | |
BAT54C,215/肖特基二極管 | 0.0336 | |
LM358DR2G/運(yùn)算放大器 | 0.345 | |
CJ431/電壓基準(zhǔn)芯片 | 0.1157 | |
LM393DR2G/比較器 | 0.3153 | |
ADUM4160BRWZ-RL/隔離式USB芯片 | 34.83 | |
REF3012AIDBZR/電壓基準(zhǔn)芯片 | 0.9357 | |
SS8050/三極管(BJT) | 0.035 | |
8S005/錫膏/錫漿 | 17.67 |
- SM Switch無錫斯茂:電子開關(guān)專業(yè)制造商
- 震東電子:一站式電感解決方案
- 用立創(chuàng)開發(fā)板,做了個(gè)AI小電視!能聊天,能翻譯……
- 中芯國(guó)際,利潤(rùn)暴漲!
- XBLW/芯伯樂產(chǎn)品應(yīng)用在數(shù)字萬用表上的開發(fā)設(shè)計(jì)
- 鴻利智匯:成為L(zhǎng)ED車燈國(guó)產(chǎn)化堅(jiān)定擁護(hù)者
- STM32F103C8T6和GD32F103C8T6有啥區(qū)別?
- 原來小米的屏幕,放大后長(zhǎng)這樣!我做了個(gè)電子顯微鏡……
- 動(dòng)態(tài)心電圖設(shè)備存儲(chǔ)解決方案:STM32L431RCT6主芯片與貼片式TF卡
- 航順:32位MCU HK32F005顛覆市場(chǎng)格局