馬明星+張玉婷+雷祥
摘要:針對(duì)傳統(tǒng)嵌入式課程設(shè)計(jì)的弊端,給出一種新的以ARM開(kāi)發(fā)板為硬件基礎(chǔ)的嵌入式課程設(shè)計(jì)方案,方案以介紹開(kāi)發(fā)流程為主線,引入嵌入式實(shí)時(shí)操作系統(tǒng),使學(xué)生能夠從整體把握嵌入式開(kāi)發(fā)流程。實(shí)踐表明,以開(kāi)發(fā)板為硬件基礎(chǔ)的嵌入式課程設(shè)計(jì),能夠提高學(xué)生的開(kāi)發(fā)興趣和自主開(kāi)發(fā)能力,達(dá)到嵌入式教學(xué)目標(biāo)。
關(guān)鍵詞:STM32;μC/OS-III;ARM;嵌入式開(kāi)發(fā);課程設(shè)計(jì)
中圖分類號(hào):TP338 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)06-0177-02
1概述
嵌入式課程是高等院校電子和信息專業(yè)一門非常重要的課程。嵌入式技術(shù)應(yīng)用規(guī)定了嵌入式這門課程應(yīng)該側(cè)重于工程性和應(yīng)用性。然而目前嵌入式教學(xué)仍然處于以理論學(xué)習(xí)為主,課程設(shè)計(jì)為輔的局面。這導(dǎo)致了學(xué)生的實(shí)踐能力得不到提升,缺乏對(duì)嵌入式課程的學(xué)習(xí)興趣[1]。其次,現(xiàn)有的嵌入式課程設(shè)計(jì)多以教學(xué)試驗(yàn)箱為主,這類教學(xué)試驗(yàn)箱配備的微處理器性能低下,難以滿足復(fù)雜項(xiàng)目的開(kāi)發(fā)需求。這些缺點(diǎn)都限制了學(xué)生對(duì)嵌入式課程的學(xué)習(xí)熱情,嵌入式教學(xué)難以達(dá)到預(yù)期效果[2]。使用開(kāi)發(fā)板進(jìn)行嵌入式教學(xué)將有效解決上述問(wèn)題。首先,從接觸硬件開(kāi)始,學(xué)生有一定的開(kāi)發(fā)興趣,其次,目前市面上的教學(xué)開(kāi)發(fā)板都配備了當(dāng)前主流單片機(jī),這類單片機(jī)具備卓越的處理性能和豐富的外設(shè)接口,能夠設(shè)計(jì)更為復(fù)雜和實(shí)用的系統(tǒng)。最后,規(guī)范化的嵌入式開(kāi)發(fā)流程也可以提高學(xué)生的動(dòng)手能力和開(kāi)發(fā)興趣[3]。本文以遠(yuǎn)洋電子工作室出品的野火STM32開(kāi)發(fā)板為例,設(shè)計(jì)一個(gè)加入嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅲ的課程設(shè)計(jì),目的在于使學(xué)生能夠接觸當(dāng)前主流的ARM芯片的結(jié)構(gòu)并且學(xué)習(xí)復(fù)雜工程的基本開(kāi)發(fā)流程,提高學(xué)生工程開(kāi)發(fā)能力和開(kāi)發(fā)興趣。
2 開(kāi)發(fā)環(huán)境介紹
硬件方面,野火開(kāi)發(fā)板上的微處理器使用的是意法半導(dǎo)體公司的STM32F103ZET6。該處理器是Cortex-M3內(nèi)核的32位微處理器,最高工作頻率可達(dá)72MHz,內(nèi)置512K的FLASH和64K的SRAM,11個(gè)定時(shí)器,同時(shí)具有多達(dá)13個(gè)通信接口。該開(kāi)發(fā)板以總線的方式引出IO,這樣的設(shè)計(jì)可以方便用戶進(jìn)行通信接口的外接工作,隔離跳帽設(shè)計(jì)可以方便用戶進(jìn)行DIY設(shè)計(jì)。開(kāi)發(fā)板可以用于完成跑馬燈、文件系統(tǒng)移植、微型實(shí)時(shí)操作系統(tǒng)移植等一系列復(fù)雜的實(shí)驗(yàn),這些實(shí)驗(yàn)可以增強(qiáng)學(xué)生的動(dòng)手能力和自主學(xué)習(xí)能力,同時(shí)培養(yǎng)他們對(duì)于嵌入式開(kāi)發(fā)的興趣。
軟件方面,以μC/OS-Ⅲ嵌入式操作系統(tǒng)為開(kāi)發(fā)環(huán)境。μC/OS以其開(kāi)源、可裁剪、可固化、穩(wěn)定性和安全性高的特點(diǎn),在嵌入式領(lǐng)域有著極其廣泛的應(yīng)用,該嵌入式系統(tǒng)也以短小簡(jiǎn)潔而著稱,適合引入嵌入式課程設(shè)計(jì)。μC/OS-Ⅲ作為μC/OS的最新版本,較前面的版本加入了許多新的特性。比如,不再限制最大任務(wù)數(shù)目,允許相同優(yōu)先級(jí)存在,加入時(shí)間片任務(wù)調(diào)度算法等。新的特性使得μC/OS-Ⅲ的功能更為強(qiáng)大,也方便了開(kāi)發(fā)者的使用[4]。
3 μC/OS-Ⅲ在STM32上的應(yīng)用
μC/OS-Ⅲ的代碼量大約在6K~24K。野火STM32開(kāi)發(fā)板的上512K字節(jié)FLASH和64K字節(jié)的SRAM運(yùn)行μC/OS-Ⅲ是非常充足的,本次課程設(shè)計(jì)采用的是μC/OS-Ⅲ的V3.02.00版本。經(jīng)過(guò)測(cè)試,該版本系統(tǒng)在STM32上可以可靠運(yùn)行,并且非常穩(wěn)定。下面將介紹課程設(shè)計(jì)的主要內(nèi)容。
3.1 功能要求
根據(jù)圖2所示的開(kāi)發(fā)板上LED燈的硬件原理圖,在給定的MDK工程中進(jìn)行編程,實(shí)現(xiàn)以下要求:
開(kāi)發(fā)板上電以后,三個(gè)綠色的LED小燈將進(jìn)行間隔為200ms的閃亮,表示系統(tǒng)已經(jīng)運(yùn)行。使用PortHelper上位機(jī)軟件,輸入LED燈編號(hào)和長(zhǎng)亮?xí)r間,對(duì)應(yīng)的LED燈將進(jìn)行定時(shí)長(zhǎng)亮。長(zhǎng)亮完畢后,LED燈將繼續(xù)進(jìn)行200ms的間隔閃亮。
3.2 設(shè)計(jì)分析
按照從下往上的原則,首先進(jìn)行板級(jí)代碼的編寫工作,主要內(nèi)容是LED的控制和串口的配置部分。之后進(jìn)行應(yīng)用級(jí)編程,在應(yīng)用級(jí)代碼中創(chuàng)建相應(yīng)的任務(wù),實(shí)現(xiàn)數(shù)據(jù)接收和長(zhǎng)亮控制。具體編程步驟:首先編程實(shí)現(xiàn)板級(jí)驅(qū)動(dòng)控制。然后在μC/OS-Ⅲ中建立啟動(dòng)任務(wù),在啟動(dòng)任務(wù)中繼續(xù)創(chuàng)建三個(gè)LED1~LED3燈的閃亮任務(wù)。上位機(jī)通過(guò)串口發(fā)送控制數(shù)據(jù)到內(nèi)存中,各個(gè)LED任務(wù)通過(guò)檢測(cè)內(nèi)存中的數(shù)據(jù)來(lái)確定是否進(jìn)行長(zhǎng)亮和進(jìn)行長(zhǎng)亮的時(shí)間。
需要指出的是,在使用串口中斷進(jìn)行數(shù)據(jù)傳輸時(shí),如果操作較快可能會(huì)出現(xiàn)數(shù)據(jù)出錯(cuò)的現(xiàn)象。鑒于此,將串口配置為DMA(Direct Memory Access)方式傳輸數(shù)據(jù),這種方式可以有效提高傳輸速度和穩(wěn)定性。
最后,為各個(gè)任務(wù)分配相應(yīng)的任務(wù)優(yōu)先級(jí),分配方案如下表1所示:
3.3 編程流程
按照從下往上的編程原則首先進(jìn)行板級(jí)代碼編程,在MDK工程的bsp項(xiàng)目組中新建兩個(gè)源文件和對(duì)應(yīng)的頭文件,這兩個(gè)源文件分別是LED燈對(duì)應(yīng)端口的配置程序和串口的配置程序。
對(duì)于LED燈的編程,為了方便移植,使用帶參宏定義LED對(duì)應(yīng)引腳:
#define Reset(p,i) {p->BRR=i;}
#define Set(p,i) {p->BSRR=i;}
BRR和BSRR寄存器是STM32的GPIO端口對(duì)應(yīng)的設(shè)置/清除寄存器。寄存器只能進(jìn)行寫1操作,在對(duì)應(yīng)的端口輸出低/高電平,寫0將不產(chǎn)生影響。上述宏定義將控制引腳的電平高低,實(shí)現(xiàn)LED點(diǎn)亮和熄滅操作[5]。
串口用來(lái)連接上位機(jī)和開(kāi)發(fā)板,在串口編程中主要包括串口配置、DMA配置和printf()函數(shù)的重定向編程。串口配置為波特率是115200,1個(gè)停止位,8個(gè)數(shù)據(jù)位,沒(méi)有校驗(yàn)位,不使用硬件流控制。這種常用的配置方式既安全又高效[6]。
最后,對(duì)printf()函數(shù)進(jìn)行重定向。printf()函數(shù)作為C語(yǔ)言的格式化輸出函數(shù),將數(shù)據(jù)發(fā)送到標(biāo)準(zhǔn)輸出設(shè)備以達(dá)到顯示的目的。在嵌入式開(kāi)發(fā)中,對(duì)于沒(méi)有標(biāo)準(zhǔn)輸出設(shè)備的情況,需要重定向該函數(shù),即將待發(fā)送數(shù)據(jù)發(fā)送至串口,利用串口助手進(jìn)行顯示。
在完成了板級(jí)代碼的編程工作之后,進(jìn)行應(yīng)用級(jí)編程。嵌入式實(shí)時(shí)操作系統(tǒng)環(huán)境下將以線程為單位進(jìn)行編程,線程也可以稱之為任務(wù)。每個(gè)任務(wù)都有自己的任務(wù)控制塊,操作系統(tǒng)通過(guò)任務(wù)控制塊去感知和控制任務(wù)。根據(jù)任務(wù)優(yōu)先級(jí)和任務(wù)的狀態(tài),μC/OS-Ⅲ進(jìn)行任務(wù)調(diào)度,以保證各個(gè)任務(wù)都能被執(zhí)行。對(duì)于每一個(gè)具體的任務(wù),都要聲明相應(yīng)的任務(wù)控制塊并且給任務(wù)分配堆棧,任務(wù)控制塊保存任務(wù)的基本屬性,任務(wù)堆棧用于保存臨時(shí)變量和中斷現(xiàn)場(chǎng)。任務(wù)堆棧的大小一般可以設(shè)置為128。在線程編程中,一般在主函數(shù)板級(jí)代碼之后進(jìn)行起始任務(wù)的創(chuàng)建工作,其余各個(gè)任務(wù)將在起始任務(wù)內(nèi)部進(jìn)行創(chuàng)建。因此,需要設(shè)置啟動(dòng)任務(wù)作為起始任務(wù)[7]。各個(gè)LED閃亮任務(wù)完成檢測(cè)內(nèi)存中的數(shù)據(jù)和執(zhí)行定時(shí)長(zhǎng)亮操作。具體方式是輪詢查看全局?jǐn)?shù)組中的控制數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行處理,判斷數(shù)據(jù)是否是發(fā)給本任務(wù)。如果不是,將繼續(xù)執(zhí)行200ms的閃亮任務(wù)。如果是則對(duì)數(shù)據(jù)中的字符進(jìn)行轉(zhuǎn)換,計(jì)算長(zhǎng)亮?xí)r間,調(diào)用系統(tǒng)延時(shí)函數(shù)進(jìn)行精確的定時(shí)長(zhǎng)亮操作。定時(shí)長(zhǎng)亮操作執(zhí)行完畢后,繼續(xù)進(jìn)行200ms的閃亮操作。至此,設(shè)計(jì)要求完成。
3.4 實(shí)驗(yàn)結(jié)果
給開(kāi)發(fā)板上電,使用MDK編譯代碼,然后,并且利用ULINK2將代碼下載到開(kāi)發(fā)板上。然后對(duì)開(kāi)發(fā)板進(jìn)行復(fù)位。可以看到三個(gè)綠色的LED小燈將進(jìn)行200ms的周期性亮滅。打開(kāi)PC端的串口助手PortHelper,選擇COM3端口,在輸入對(duì)話框中輸入“L3 30”字樣。點(diǎn)擊發(fā)送,可以看到LED2小燈將停止閃爍,并點(diǎn)亮,點(diǎn)亮?xí)r長(zhǎng)為30秒。30秒后,LED2小燈將繼續(xù)進(jìn)行200ms間隔的閃亮。下圖2為實(shí)驗(yàn)截圖:
4 結(jié)束語(yǔ)
以STM32開(kāi)發(fā)板為硬件基礎(chǔ),學(xué)生接觸當(dāng)前主流的嵌入式開(kāi)發(fā)芯片,課程設(shè)計(jì)中引入嵌入式實(shí)時(shí)操作系統(tǒng),并且涉及開(kāi)發(fā)板底層硬件驅(qū)動(dòng)以及應(yīng)用級(jí)軟件編程。使學(xué)生能夠從硬件到軟件、從底層到上層、從裸機(jī)程序到系統(tǒng)編程全面接觸嵌入式開(kāi)發(fā)總體流程,對(duì)嵌入式工程開(kāi)發(fā)的原理、流程和要點(diǎn)有整體性的把握,從而達(dá)到嵌入式教學(xué)的教學(xué)目標(biāo)。
參考文獻(xiàn):
[1] 胡仕剛,曹會(huì)祎,吳笑峰,等.基于開(kāi)發(fā)板的嵌入式系統(tǒng)課程教學(xué)模式探索[J].信息通信,2016(7):160-161.
[2] 陸慶,肖堃,聶曉文.嵌入式課程實(shí)驗(yàn)教學(xué)體系的改革與創(chuàng)新[J].實(shí)驗(yàn)科學(xué)與技術(shù),2011(S1):201-203,216.
[3] 王超,駱德漢,鄭魏,等.基于STM32的嵌入式智能家居無(wú)線網(wǎng)關(guān)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013(3):241-244.
[4] 楊偉,肖義平.基于STM32F103C8T6單片機(jī)的LCD顯示系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2014(20):29-31,34.
[5] 常薇,孫穎,孫愛(ài)東.嵌入式課程設(shè)計(jì)開(kāi)放性實(shí)驗(yàn)建設(shè)—嵌入式SD卡接口系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)[J].實(shí)驗(yàn)室研究與探索,2007(12):225-227.
[6] Chen Tiejun,YangShaoming. Implementation of the Modbus/TCP Protocol on the STM32[J].Journal of Convergence Information Technology,2013,82.
[7] Bush,Steve. NXP reveals 150MHz ARM Cortex M3[J].Electronics Weekly,2010,2441.