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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 主流32位單片機(jī)攻略連載:為什么要學(xué)STM32?

          主流32位單片機(jī)攻略連載:為什么要學(xué)STM32?

          作者: 時(shí)間:2012-08-08 來源:網(wǎng)絡(luò) 收藏

            1)產(chǎn)品需求文檔:描述產(chǎn)品的特性

            2)功能需求文檔:描述產(chǎn)品必須具備的功能

            3)工程說明文檔:描述系統(tǒng)實(shí)現(xiàn)的方法和滿足需求的手段

            4)硬件說明文檔:對(duì)有關(guān)硬件進(jìn)行描述

            5)軟件或固件說明文檔:描述特定處理器下設(shè)計(jì)微程序以及固件的方法

            6)測(cè)試說明文檔:描述必須測(cè)試的項(xiàng)目和驗(yàn)證系統(tǒng)正常運(yùn)行的方法

            1.需求定義

            需求定義用來描述產(chǎn)品的基本功能,對(duì)于公司來說,需求一般由該公司的市場(chǎng)銷售部門或該公司的主要客戶來制定;而對(duì)小公司或愛好者,技術(shù)人員可以自己負(fù)責(zé)定義需求,并撰寫成文檔;對(duì)于神舟系列開發(fā)板來說,主要就是提供各種接口,為大家開發(fā)產(chǎn)品時(shí)提供借鑒!

            通常需求定義是圍繞以下幾個(gè)因素而來:

            1)系統(tǒng)的用途(定義需要系統(tǒng)實(shí)現(xiàn)的各種功能)

            2)實(shí)際輸入輸出是何種方式實(shí)現(xiàn)的(為元器件的選型做參考)

            3)系統(tǒng)是否需要操作界面(涉及軟件層操作系統(tǒng)的選型)

            其實(shí)對(duì)小型的嵌入式產(chǎn)品來說,定義需求是非常關(guān)鍵的,因?yàn)樾枨笄宄耍涂梢员苊夂罄m(xù)開發(fā)過程中出現(xiàn)的諸如隨機(jī)存儲(chǔ)器(RAM)容量不足或所選的CPU速度不能滿足處理的需要等一系列問題。

            ----------------------------------------------------------------------------------------------------------

            下面舉個(gè)簡(jiǎn)單的實(shí)際例子,供大家來參考:

            系統(tǒng)描述:用于從化溫泉的水泵換水系統(tǒng)(用神舟III號(hào)開發(fā)板模擬實(shí)現(xiàn))

            電源輸入:使用來自于變壓器的9V~12V直流電

            水泵功率:375W

            1)使用單相交流電機(jī),由機(jī)械電氣進(jìn)行控制

            2)如果溫泉池處于低水位,則輸入開關(guān)閉合信號(hào),以禁止水泵繼續(xù)運(yùn)行

            3)用戶可以自由設(shè)置水泵運(yùn)行或關(guān)閉的時(shí)間長(zhǎng)度

            4)除了自動(dòng)設(shè)置控制外,還需要提供一種人工裝置來允許維護(hù)人員靈活控制水泵進(jìn)行維修

            5)水泵開啟/關(guān)閉/人工干預(yù)的時(shí)間可以30分鐘為單位,在30分鐘到23小時(shí)的范圍內(nèi)進(jìn)行調(diào)節(jié)

            6)顯示設(shè)備可以指示水泵的開關(guān)狀態(tài),剩余時(shí)間,以及水泵是否處于人工干預(yù)模式

            7)具備監(jiān)視低水位的功能,并顯示在屏幕上

            如果需要商用,那么除了上面給出的功能要求外,其設(shè)計(jì)文檔中還要包括電磁干擾(EMI)和電磁兼容性(EMC)認(rèn)證、安全認(rèn)證以及使用環(huán)境(包括環(huán)境溫度、濕度、鹽霧腐蝕等)等方面的需求。

            實(shí)際上,以上的需求確定之后,接下來就是要考慮選擇一款合適的CPU來滿足和實(shí)現(xiàn)系統(tǒng)的功能,那么我們就要將上述7點(diǎn)用戶能夠理解的需求轉(zhuǎn)化成我們專業(yè)領(lǐng)域的需求,轉(zhuǎn)化如下,大家可以參考一下:

            a.處理或更新輸入輸出信號(hào)的速率究竟需要多快?

            解釋:目前嵌入式處理器的主頻一般都在幾十兆到幾百兆不等,的主頻一般是幾十兆,神舟系列開發(fā)板的CPU都是72MHZ,有的 ARM9,ARM11處理器可以到幾百兆;我們主要看這個(gè)產(chǎn)品是否需要對(duì)大量數(shù)據(jù)進(jìn)行處理,或是否需要對(duì)緩沖區(qū)進(jìn)行頻繁操作,是否有類似的占用CPU資料的工作要做,這就決定我們要選擇一款合適的處理器來讓該產(chǎn)品得到最佳的性能。

            b.是否可使用單片集成電路(專用IC)或FPGA來完成數(shù)據(jù)處理?

            解釋:如果可以的話,就不一定要選擇處理器來做,用這些專業(yè)芯片就能替代

            c.系統(tǒng)是否有大量的用戶輸入輸出操作(如對(duì)開關(guān)和顯示設(shè)備進(jìn)行頻繁操作)?

            解釋:如果有的話,要在處理器選型的時(shí)候考慮這些因素,選擇一款能夠滿足以上要求的CPU.

            d.系統(tǒng)與其他外部設(shè)備之間需要使用何種接口?

            解釋:這也是需要評(píng)估處理器的一個(gè)關(guān)鍵問題,選擇具備這些接口功能的處理器會(huì)方便于我們的電路設(shè)計(jì)以及軟件編程

            e.設(shè)計(jì)完成后是否有可能需要進(jìn)行改動(dòng),或在設(shè)計(jì)過程中系統(tǒng)需求是否可能出現(xiàn)變化?我們的設(shè)計(jì)是否能適應(yīng)系統(tǒng)需求的變化?

            解釋:要避免選擇的處理器剛好滿足當(dāng)前要求,這樣當(dāng)以后事務(wù)要求逐漸提高,處理器性能如果還有一定空間的話,那么就可以重用目前的產(chǎn)品;第二個(gè)就是要選擇不會(huì)即將停產(chǎn)的芯片,很多處理器用得很廣乏,可以借鑒的資料也很多,但是很可能這款芯片已經(jīng)在市場(chǎng)上流行很長(zhǎng)時(shí)間了,芯片廠商已經(jīng)推出更新?lián)Q代的替代品了,如果你選擇了這款芯片,很可能1,2年后就買不到這款處理器芯片了,導(dǎo)致不得不重新選擇新的處理器,重新設(shè)計(jì)產(chǎn)品,這樣的既耗費(fèi)時(shí)間,金錢,更消耗人力,延誤市場(chǎng)的戰(zhàn)機(jī)。

          2.處理器的選擇

            2.1.需要使用的I/O管腳數(shù)量

            多數(shù)處理器都是使用內(nèi)存和外部管腳來控制輸入輸出設(shè)備的,通常處理器都會(huì)有內(nèi)置ROM和RAM的,如果內(nèi)置的內(nèi)存就已經(jīng)滿足需要,那么處理器就可以節(jié)省產(chǎn)生引用外部存儲(chǔ)器信號(hào)的引腳,這樣處理器可為輸入輸出提供較多的設(shè)備管腳(某些處理器支持外部RAM或ROM的使用,但對(duì)外部存儲(chǔ)器進(jìn)行訪問時(shí),處理器一般需要占用8條到10條I/O管腳)。

            還有,有些處理器帶有專用的內(nèi)部定時(shí)時(shí)鐘,這類時(shí)鐘也需要使用一個(gè)端口管腳來實(shí)現(xiàn)某些定時(shí)功能;某些處理器中還具有漏極輸出和高電流輸出能力,可以方便的直接驅(qū)動(dòng)繼電器或電磁鐵線圈,而不再需要額外驅(qū)動(dòng)硬件的支持。

            當(dāng)對(duì)處理器I/O管腳進(jìn)行計(jì)數(shù)時(shí),我們一定要把使用處理器內(nèi)部功能(如串行接口和定時(shí)器等)時(shí)限制使用的某些管腳考慮在內(nèi)。

            2.2.需要使用的接口數(shù)量

            嵌入式處理器的主要功能是與應(yīng)用環(huán)境中的硬件進(jìn)行交互操作,這不僅需要外部硬件對(duì)接口具有實(shí)時(shí)處理能力,而且還要求處理器必須以足夠快的速度對(duì)接口數(shù)據(jù)進(jìn)行有效處理。

            舉例來說,STM32神舟系列開發(fā)板的CPU是ST公司出品的一款工業(yè)級(jí)微處理器,它基于CORTEX M3的核心,處理主頻可達(dá)72MHZ,同時(shí)處理器內(nèi)部配置了USB、SPI、IIC等接口,像STM32神舟IV號(hào)的107處理器還支持Ethernet 等輸出接口,其目的是更方便的利用這些接口開發(fā)出嵌入式產(chǎn)品。

            需要注意的是,由于許多處理器具有的局限性沒有在處理器技術(shù)資料中給予足夠的說明,因此一定要仔細(xì)閱讀處理器的指標(biāo)說明。例如,在閱讀資料的過程中發(fā)現(xiàn),該資料可能會(huì)說明其串行接口可以在最高波特率下工作,但仔細(xì)研究該處理器的指標(biāo)數(shù)據(jù)時(shí),可能會(huì)發(fā)現(xiàn)并非該串口接口的所有操作模式都可以在最大波特率下運(yùn)行。

            深入了解并明確接口要求的方法:可以自己動(dòng)手編寫一些程序來對(duì)接口進(jìn)行實(shí)際測(cè)試,以確認(rèn)某種處理器是否可以滿足應(yīng)用的要求;因?yàn)椋_認(rèn)某個(gè)處理器是否可以滿足接口要求并非是一件簡(jiǎn)單的任務(wù)。

            2.3.需要使用的內(nèi)存容量

            決定內(nèi)存容量的大小是嵌入式產(chǎn)品設(shè)計(jì)過程中的一個(gè)基本步驟,如果對(duì)所需內(nèi)存容量估計(jì)過高,那么我們就有可能會(huì)選擇成本較高的解決方案;反之,如果低估了所需內(nèi)存容量,就有可能因系統(tǒng)需要重新設(shè)計(jì)而導(dǎo)致項(xiàng)目不能按時(shí)完工。

            a.RAM和ROM的區(qū)別:存儲(chǔ)器分為隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)兩種。其中ROM通常用來固化存儲(chǔ)一些生產(chǎn)廠家寫入的程序或數(shù)據(jù),用于啟動(dòng)電腦和控制電腦的工作方式。而RAM則用來存取各種動(dòng)態(tài)的輸入輸出數(shù)據(jù)、中間計(jì)算結(jié)果以及與外部存儲(chǔ)器交換的數(shù)據(jù)和暫存數(shù)據(jù)。設(shè)備斷電后,RAM中存儲(chǔ)的數(shù)據(jù)就會(huì)丟失。

            b.隨即存儲(chǔ)器(RAM)的選擇:RAM容量的預(yù)測(cè)是比較直觀的,我們只需把所有變量數(shù)目與所有內(nèi)部緩沖區(qū)的容量以及先入先出(FIFO)隊(duì)列長(zhǎng)度和堆棧長(zhǎng)度直接相加,就能得到所需RAM容量的總數(shù)。

            如果所需內(nèi)存容量超出這類處理器的尋址范圍,那么只能通過增加外部RAM來滿足需求;然而,增加外部RAM的同時(shí)將會(huì)占用一定數(shù)量的I/O管腳來對(duì)擴(kuò)展內(nèi)存進(jìn)行尋址,這種擴(kuò)展往往會(huì)影響到處理器來實(shí)現(xiàn)應(yīng)用的初衷。



          評(píng)論


          相關(guān)推薦

          技術(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); })();