<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 怎樣學(xué)習(xí)MSP430單片機(jī)

          怎樣學(xué)習(xí)MSP430單片機(jī)

          作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          MSP430是Texas Instrument(TI,德州儀器)推出的一款超低功耗單片機(jī)。TI是一個(gè)非常有實(shí)力的、全球領(lǐng)先的芯片制造公司,MSP430不僅因?yàn)槠鋬?yōu)秀的設(shè)計(jì),更因?yàn)門I提供的強(qiáng)有力的技術(shù)支持,而很快成為今天市場上非常受歡迎的一款單片機(jī)。

          使用官方資料

          學(xué)習(xí)使用任何一款芯片,我們要明確最根本最權(quán)威的參考資料是官方給出的資料。對于MSP430單片機(jī),也不例外。市面上有各種各樣介紹MSP430單片機(jī)的書,水平參差不齊。而其中有一大部分基本上就是翻譯芯片手冊,更大的問題是,很多書上還有大量的印刷錯(cuò)誤等(像寄存器寫錯(cuò)、程序有問題等的現(xiàn)象很常見)。這樣的情況下,很難好好學(xué)習(xí)。

          本文引用地址:http://www.ex-cimer.com/article/201611/318292.htm

          在學(xué)習(xí)430單片機(jī)的過程中,尤其是對于接觸過51單片機(jī)的人來說,我們最好不要還是像學(xué)習(xí)51單片機(jī)一樣,到處找視頻教程,指望著完全中文的資料,而應(yīng)該學(xué)會(huì)如何去使用官方給出的資料?;蛟S你沒有體會(huì)到這樣有什么好處,但是將來如果要研究一些比較深入的東西,或者你要用一些最新的芯片,這時(shí)你唯一能獲取的資料,不是各種中文書籍和翻譯來的資料,更不是各種視頻教程,而往往只是官方給出的一些全英文的手冊。

          所有的芯片官方都會(huì)給出對應(yīng)的Data Sheet(數(shù)據(jù)手冊,芯片手冊),有些會(huì)有Application Note(應(yīng)用筆記),對于一些復(fù)雜的芯片,有一些強(qiáng)大的公司可能也會(huì)推出一些中文資料,但還是以英文資料為主。因?yàn)橛⒄Z是國際通用的語言,何況很多高科技產(chǎn)業(yè)往往又在國外。過分依賴中文資料,就很難學(xué)好這些東西。另外,官方給出的資料,就像是說明書一樣,經(jīng)過了很多次的核對修正,還會(huì)及時(shí)的勘誤,比如430的Errata Sheet會(huì)專門指出官方各種手冊資料中的紕漏和錯(cuò)誤。官方手冊的權(quán)威性,是任何根據(jù)官方手冊編寫的資料視頻所不及的。

          不要懼怕英文

          在技術(shù)性的手冊中,除了一些專有名詞外,都會(huì)避免使用復(fù)雜的句式,避免復(fù)雜的語法,以及一些難以理解的詞匯。看不懂的專有名詞,我們完全可以通過查詞典來克服。久而久之,就會(huì)習(xí)慣,英文水平長進(jìn)了,也不再懼怕英文了。這里引用一位同學(xué)的話:“TI的文檔寫的相當(dāng)好,通俗易懂,而中文翻譯水平層次不一,必要的術(shù)語也不知道什么意思。而且中文翻譯的文檔制作的真心太差。我想你們也不甘心學(xué)十年英語就為了一個(gè)六級吧?”

          基本認(rèn)識

          學(xué)習(xí)MSP430,首先我們應(yīng)該了解MSP430的特點(diǎn),分為哪幾個(gè)系列,這些在官方介紹文檔中都有。

          大致了解430內(nèi)部都集成了哪些外設(shè)模塊,分別有什么作用,比如AD、串口、硬件I2C等。根據(jù)實(shí)際應(yīng)用需要,查看官方選型手冊,選擇合適的430型號,看RAM、ROM大小、定時(shí)器數(shù)目、最高運(yùn)行速度、IO管腳數(shù)目、封裝等就可以。也可以直接在TI官網(wǎng)選擇型號(如下圖)。

          如果不知道選什么型號,或者是想先學(xué)學(xué),可以選一些常用型號,如MSP430F149,MSP430G2553(LaunchPad上用的,有DIP直插的封裝,比較好用),MSP430F5438(比較高端的一個(gè)型號,價(jià)格也比較貴)。


          參考資料

          選好型號后,就可以上TI官網(wǎng),下載該型號對應(yīng)的DataSheet,Users Guide,以及Code Examples。

          DataSheet介紹了具體某個(gè)型號的各種參數(shù),封裝格式,管腳分布,性能特點(diǎn)等。

          Users Guide是分為幾個(gè)系列分別去講各種模塊的結(jié)構(gòu)和寄存器,同一個(gè)系列的不同型號,含有的同一個(gè)模塊操作通常都一樣,主要是管腳分配不一樣,或者一些型號只含有模塊中的一部分功能,比如定時(shí)器的比較捕獲模塊數(shù)目不同。

          而Code Examples則是官方給出的可直接編譯執(zhí)行的程序代碼。比如MSP430G2553內(nèi)部有10位精度的AD,即ADC10模塊,而在MSP430x2xx Family Users Guide上就有對ADC10模塊的介紹。同樣是2xx系列,有些芯片沒有ADC10,但是有ADC12,這個(gè)模塊同樣會(huì)在Users Guide上介紹。

          開發(fā)板

          我們可能需要一塊開發(fā)板,官方推出的LaunchPad是一個(gè)不錯(cuò)的選擇。LaunchPad上使用的是ValueLine超值系列(2xx系列)的430芯片G2553和G2452,對于簡單的項(xiàng)目開發(fā)綽綽有余,比51單片機(jī)常用的型號89C52RC要強(qiáng)大不少,而且是430單片機(jī)中有DIP直插封裝的很少的幾種型號之一,對于我們手工焊接很方便。

          LaunchPad更大的優(yōu)勢在于,在幾十塊錢的開發(fā)板上,集成了JTAG調(diào)試芯片,可以連接計(jì)算機(jī)直接進(jìn)行程序的調(diào)試。LaunchPad使用的是兩線JTAG,而不少430型號不支持兩線JTAG,則需要購買比較昂貴的430標(biāo)準(zhǔn)JTAG仿真器。JTAG仿真器同時(shí)可以進(jìn)行程序的燒寫。430也支持價(jià)格低廉的BSL方式燒寫程序,但BSL就沒有JTAG強(qiáng)大的調(diào)試功能了。

          關(guān)于LaunchPad的使用,官方給出了十分詳細(xì)的介紹文檔《Getting Started with the MSP430 LaunchPad》,包括怎么新建工程都有具體到每一步的截圖(使用的是CCS軟件)。關(guān)于具體電路實(shí)現(xiàn),則可以參考官方的《MSP430 Hardware Tools Users Guide》。如果動(dòng)手能力強(qiáng),也可以嘗試自己焊接簡易開發(fā)板。

          開發(fā)環(huán)境

          然后要安裝開發(fā)環(huán)境。最常用的是官方推出的CCS和IAR公司推出的IAR Embedded Workbench For MSP430。兩種軟件各有優(yōu)缺點(diǎn),CCS的優(yōu)點(diǎn)是集成Eclipse,還有官方推出的430Ware、Grace插件,用起來比較方便,軟件比較穩(wěn)定,但是由于Eclipse基于Java開發(fā),反應(yīng)比較遲鈍,IAR的優(yōu)勢則是編譯效率非常高,能產(chǎn)生高效的代碼,缺點(diǎn)是運(yùn)行不太穩(wěn)定,有時(shí)會(huì)死機(jī)??傮w來說,目前建議用IAR EW430。

          程序編寫

          然后就要開始寫程序了。首先我們應(yīng)該了解最基本的一些東西,時(shí)鐘、看門狗定時(shí)器、以及IO操作。我們并不一定要對它們都掌握透徹,但是應(yīng)該知道怎么初始化時(shí)鐘開啟外部高速晶振,看門狗是什么,怎么關(guān)閉看門狗以免系統(tǒng)復(fù)位等。

          然后根據(jù)我們的實(shí)際需求,再進(jìn)一步去了解定時(shí)器、串口、硬件SPI、硬件I2C、Flash讀寫、AD、DA等的操作。如果是為了做一個(gè)項(xiàng)目,我們只要學(xué)習(xí)要用的模塊就足夠了,如果是想提前學(xué)習(xí)以備以后使用,了解常用的模塊就可以了。

          學(xué)習(xí)每個(gè)模塊時(shí),我們應(yīng)該先看芯片手冊,確認(rèn)自己使用的型號有這個(gè)模塊,以及相應(yīng)IO口的分配情況,然后認(rèn)真詳細(xì)的看Users Guide中內(nèi)部結(jié)構(gòu)框圖和寄存器的介紹,參考Code Examples去寫程序,并進(jìn)行測試。在學(xué)習(xí)每個(gè)模塊時(shí),我們可以把這些模塊的程序?qū)懗瑟?dú)立的文件,必要的地方自己做一些注釋說明,保留好這些程序,方便以后使用。下次再用的時(shí)候,即使忘了怎么操作,只要自己之前寫好的模塊文件,然后根據(jù)自己注釋的調(diào)用規(guī)則去調(diào)用函數(shù),就可以很輕松的使用,代碼得到了重復(fù)利用,非常節(jié)省時(shí)間精力。

          學(xué)過51或其他單片機(jī)的人,就沒必要特地花時(shí)間在學(xué)430的時(shí)候又特地把數(shù)碼管、1602什么的外設(shè)重新再學(xué)一遍了,因?yàn)槌绦蚨际且粯拥膶懛?,只是IO口的操作有點(diǎn)不同而已。

          在這里,強(qiáng)烈建議大家學(xué)會(huì)模塊化編程,代碼分層。

          前面說的把每個(gè)模塊寫成單獨(dú)的文件,通過調(diào)用函數(shù)去重復(fù)使用,就是模塊化編程的思想。

          另一方面,學(xué)會(huì)代碼分層,比如同樣是驅(qū)動(dòng)數(shù)碼管,對于不同的單片機(jī),只是IO操作語句寫法不同,而IO的高低電平控制是一樣的。我們把具體IO操作語句用宏定義寫出來(如#define LED_OFF P1OUT&=~BIT0),更換單片機(jī)只需要修改宏定義,這樣就可以實(shí)現(xiàn)代碼復(fù)用,節(jié)省了精力。

          在這里,宏定義根據(jù)不同的單片機(jī),寫法不一樣,屬于硬件接口層;而數(shù)碼管掃描函數(shù)始終是調(diào)用宏定義過的語句控制IO口電平,不同單片機(jī)寫法一樣,則屬于驅(qū)動(dòng)層;這樣的做法就叫做代碼分層,也是模塊化編程很大的一個(gè)特點(diǎn)。

          這里再說一點(diǎn),可能有人之前學(xué)習(xí)51單片機(jī)時(shí)寫過軟件模擬I2C程序讀寫AT24C01等芯片,現(xiàn)在改用430了,我們?nèi)匀豢梢杂煤甓x操作IO,軟件模擬I2C時(shí)序,另一方面,430內(nèi)部集成了硬件I2C,我們也可以學(xué)習(xí)硬件I2C,通過設(shè)置相關(guān)寄存器去控制相同的芯片。一般情況下,硬件接口比軟件接口會(huì)更有優(yōu)勢,因?yàn)椴恍枰加肅PU時(shí)間去模擬時(shí)序。這個(gè)時(shí)候,可能就需要重新去了解一下了,因?yàn)橛行┙涌谟糜布?shí)現(xiàn)和用軟件模擬還是有一定區(qū)別的。

          單片機(jī)不是用來學(xué)的,而是要去用的

          用什么學(xué)什么,這樣能更好的掌握所學(xué)知識,也不至于感覺無從下手。MSP430有幾百個(gè)型號,我們沒必要把每種型號每個(gè)模塊都拿來學(xué)一遍,也不可能有那樣的精力,即使你打算全部學(xué),還沒學(xué)完,TI又會(huì)推出一款新的產(chǎn)品。對于其它的各種芯片等的使用也是類似的。所以我們要做的,是掌握學(xué)習(xí)的方法,以不變應(yīng)萬變。




          關(guān)鍵詞: msp430單片

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();