《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II串口通信的設(shè)計(jì)與實(shí)現(xiàn)
嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II串口通信的設(shè)計(jì)與實(shí)現(xiàn)
宋 亮,苗 瓊
摘要: 為解決實(shí)時(shí)操作系統(tǒng)μC/OS-II串口通信設(shè)計(jì)中信號(hào)量、消息郵箱使用方法的問(wèn)題,提出了一種以STM32V評(píng)估板為硬件平臺(tái)和μC/OS-Ⅱ的串口通信程序設(shè)計(jì)方案。該方案采用Cortex-M3架構(gòu)的ARM處理器STM32F103VB作為主控制芯片,ST3232作為串口通信電平轉(zhuǎn)換器。軟件設(shè)計(jì)部分描述了信號(hào)量、消息郵箱的應(yīng)用場(chǎng)合和基本操作方法,通過(guò)信號(hào)量和消息郵箱的配合使用保證任務(wù)間的數(shù)據(jù)傳輸?shù)耐叫浴=o出了整個(gè)程序中的設(shè)計(jì)思路,程序開(kāi)發(fā)使用STM32F103VB處理器自帶的固件庫(kù),減少了繁瑣的寄存器配置,降低了程序開(kāi)發(fā)強(qiáng)度。實(shí)驗(yàn)驗(yàn)證了在2種不用通信速率下數(shù)據(jù)傳輸具有誤碼率低、傳輸穩(wěn)定可靠的特點(diǎn),并且若能夠配合相應(yīng)的數(shù)據(jù)校驗(yàn)算法就可將其應(yīng)用于工業(yè)現(xiàn)場(chǎng)的數(shù)據(jù)通信。
Abstract:
Key words :

    ARM是目前嵌入式領(lǐng)域中應(yīng)用最廣泛的RISC微處理器結(jié)構(gòu),以低成本、低功耗、高性能的特點(diǎn)占據(jù)了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的領(lǐng)先地位,已遍及工業(yè)控制、消費(fèi)類(lèi)電子產(chǎn)品、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、無(wú)線(xiàn)系統(tǒng)等各類(lèi)產(chǎn)品市場(chǎng)。STM32F103VB是基于ARM新內(nèi)核Cortex-M3的通用微處理器,STM32V評(píng)估板是基于該芯片的學(xué)習(xí)板并集成了仿真調(diào)試器(Ulink_Me),可以方便用戶(hù)快速學(xué)習(xí)和開(kāi)發(fā)用戶(hù)程序。目前常見(jiàn)的嵌入式系統(tǒng)有:WinCE、Linux、pSoS、VxWorks和μC/OS-II等。μC/OS-Ⅱ是專(zhuān)門(mén)為嵌入式系統(tǒng)應(yīng)用設(shè)計(jì)的,具有源碼公開(kāi)、實(shí)時(shí)性好、可移植裁剪、高效穩(wěn)定和教學(xué)科研免費(fèi)使用等特點(diǎn),已經(jīng)成功移植到8、16、32和64位等多種微處理器上,廣泛應(yīng)用于照相攝影、醫(yī)療器械、音響設(shè)備、工業(yè)機(jī)器人控制、發(fā)動(dòng)機(jī)控制、航空器、高速公路電話(huà)系統(tǒng)、自動(dòng)提款機(jī)等眾多領(lǐng)域。這里以STM32V評(píng)估板為硬件開(kāi)發(fā)平臺(tái),結(jié)合μC/OS-II嵌入式操作系統(tǒng),設(shè)計(jì)了基于信號(hào)量、消息郵箱的串口通信應(yīng)用程序。

1 信號(hào)量、消息郵箱
    μC/OS-II由事件(Event)驅(qū)動(dòng),一般事件包括信號(hào)量(Semaphores)、互斥信號(hào)量(Mutex semaphores)、消息郵箱(Message Mail boxes)、消息隊(duì)列(Message Query)、事件標(biāo)志組(Event Flag Group)等。其中信號(hào)量和消息郵箱作為一種常見(jiàn)的通信機(jī)制,在數(shù)據(jù)通信過(guò)程中應(yīng)用最為廣泛。
1.1 信號(hào)量(Semaphores)
    μC/OS-II的信號(hào)量由2部分組成:一個(gè)是信號(hào)的計(jì)數(shù)值(0~65 535);另一個(gè)是由等待該信號(hào)量的任務(wù)組成的等待任務(wù)列表。信號(hào)量可用于以下場(chǎng)合:允許一個(gè)任務(wù)與其他任務(wù)或中斷同步;取得共享資源的使用權(quán)(滿(mǎn)足互斥條件);標(biāo)志事件的發(fā)生。
    對(duì)信號(hào)量一般可以實(shí)施以下3種操作:初始化(INITIALIZE)信號(hào)量或者稱(chēng)為創(chuàng)建信號(hào)量(CREATE);等待信號(hào)量(WAIT)或者稱(chēng)為掛起信號(hào)量(PEND);發(fā)送信號(hào)量(POST)。
    信號(hào)量在初始化過(guò)程中需要給信號(hào)量賦初值,等待信號(hào)量的任務(wù)表(WAWING LIST)應(yīng)清為空。信號(hào)量的使用需要調(diào)用相應(yīng)的函數(shù)并配置其相關(guān)的宏定義,具體如表1所示。

1.JPG


1.2 消息郵箱(Message Mail boxes)
    消息郵箱能使任務(wù)或中斷服務(wù)向另外一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量,這個(gè)指針指向一個(gè)包含指定“消息”的數(shù)據(jù)結(jié)構(gòu)。消息郵箱發(fā)送的不是消息本身,而是消息的地址指針。
    消息郵箱可用于通知一個(gè)事件發(fā)生或作為二值信號(hào)量使用。消息郵箱的工作原理是郵箱在初始化時(shí)建立一個(gè)等待消息的任務(wù)列表,當(dāng)郵箱為空時(shí),等待消息的任務(wù)就掛起,并且被加入到等待消息的任務(wù)列表中。當(dāng)郵箱收到消息時(shí),等待任務(wù)列表中優(yōu)先級(jí)最高的任務(wù)或者最先等待消息的任務(wù)得到消息,且轉(zhuǎn)入就緒并從任務(wù)列表中清除。
    對(duì)消息郵箱的操作一般有3種:郵箱初始化(INITIALIZE),或者稱(chēng)為建立郵箱(CREATE);發(fā)送消息給郵箱(POST);等待消息進(jìn)入郵箱(PE-ND);無(wú)等待請(qǐng)求郵箱消息(ACCEFT)。
    消息郵箱的使用需要調(diào)用相應(yīng)的函數(shù)并配置其相關(guān)的宏定義,具體如表2所示。

2.JPG

 

2 硬件開(kāi)發(fā)設(shè)計(jì)
2.1 硬件開(kāi)發(fā)平臺(tái)
    以STM32V評(píng)估板為硬件開(kāi)發(fā)平臺(tái),該評(píng)估板采用ST公司32位ARM微處理器STM32F103VB,該芯片最大時(shí)鐘頻率72 MHz,內(nèi)置大容量存儲(chǔ)器包括128 KB的高速Flash和20 K的SRAM,豐富的外設(shè)接口:80個(gè)高速I(mǎi)/O接口,3個(gè)USART,2個(gè)I2C,2個(gè)SPI,7通道的DMA,RTC等。STM32V開(kāi)發(fā)板將這些外設(shè)接口全部引出,自帶LCD液晶顯示并集成調(diào)試工具,用戶(hù)可方便設(shè)計(jì)、調(diào)試和查看程序運(yùn)行結(jié)果等。評(píng)估板功能模塊組成如圖1所示,主要包括以下部分:模擬輸入信號(hào)部分、跳線(xiàn)配置、USB電源供給、液晶顯示、串口通信、CAN通信、復(fù)位/輸入按鈕、LED顯示和SD卡存儲(chǔ)。

3.JPG


2.2 通信電路
    計(jì)算機(jī)與外界的信息交換稱(chēng)為通信。通信基本方式分為串行通信和并行通信兩種。串行通信是指一個(gè)數(shù)據(jù)是逐位順序傳送的通信方式,串行通信有同步和異步兩種基本的通信方式。
    其中,同步通信是通過(guò)同步時(shí)鐘來(lái)實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)的同步。而異步通信規(guī)定了字符數(shù)據(jù)的傳送格式,即每個(gè)數(shù)據(jù)以相同的幀格式傳送。每一幀信息由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。依據(jù)起始位在每個(gè)字符數(shù)據(jù)開(kāi)始時(shí)使發(fā)送和接收同步,停止位則作為字符結(jié)束的標(biāo)志。
    PC機(jī)的串行通信接口采用的是EIA RS-232E標(biāo)準(zhǔn)串行通信協(xié)議。在本設(shè)計(jì)中,主控芯片STM32F103VB的接口采用TTL電平,規(guī)定0~0.8 V為“0”電平,2~5V為“1”電平,它不能直接與PC機(jī)標(biāo)準(zhǔn)串行通信接口連接,必須設(shè)計(jì)TTL電平到RS-232協(xié)議電平信號(hào)的轉(zhuǎn)換電路。串口RS-232電平與STM32F103VB微處理器TTL電平轉(zhuǎn)換由開(kāi)發(fā)板上的ST3232完成,接口電路如圖2所示。

4.JPG

3 軟件開(kāi)發(fā)設(shè)計(jì)
    選擇RealView MDK軟件作為開(kāi)發(fā)工具,它是針對(duì)各種嵌入式處理器開(kāi)發(fā)的軟件開(kāi)發(fā)工具。與ARM之前的工具包ADS等相比,RealView編譯器可將代碼密度提高10%,性能改善20%,并且支持ARM7、ARM9和最新的Cortex-M3核處理器。編程語(yǔ)言可以使用C或者C++語(yǔ)言,支持在線(xiàn)調(diào)試。
    嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ可以管理256個(gè)任務(wù),除了系統(tǒng)任務(wù)外,用戶(hù)應(yīng)用程序最多可以有248個(gè)任務(wù),而中斷嵌套的層數(shù)最多也可以到255層。任務(wù)創(chuàng)建過(guò)程包含了任務(wù)堆棧大小的設(shè)置、優(yōu)先級(jí)分配以及在通信或保持同步過(guò)程中使用的信號(hào)量和郵箱。在STM32V評(píng)估板上通過(guò)RS232接口實(shí)現(xiàn)了評(píng)估板與PC機(jī)的通信,軟件設(shè)計(jì)流程如圖3所示,在完成相應(yīng)的初始化之后,創(chuàng)建程序設(shè)計(jì)中用到的信號(hào)量和消息郵箱,緊接著需要?jiǎng)?chuàng)建應(yīng)用任務(wù),最后啟動(dòng)系統(tǒng)。

5.JPG


    由該流程圖可以看出:本程序設(shè)計(jì)中創(chuàng)建了4個(gè)任務(wù),即LED顯示任務(wù),液晶顯示任務(wù),串口數(shù)據(jù)發(fā)送任務(wù)和數(shù)據(jù)發(fā)送控制任務(wù)。每一個(gè)任務(wù)都要有相應(yīng)的優(yōu)先級(jí)和任務(wù)堆??臻g,程序設(shè)計(jì)中每個(gè)任務(wù)的堆棧空間為512個(gè)字節(jié),優(yōu)先級(jí)依次為11,13,4,6。
    ST公司用標(biāo)準(zhǔn)的ANSI C封裝了ARM微處理器中各個(gè)功能寄存器,為用戶(hù)應(yīng)用程序的開(kāi)發(fā)提供了豐富的固件庫(kù)(Firmware)。固件庫(kù)方便用戶(hù)對(duì)底層微處理器外設(shè)進(jìn)行初始化配置,如串口初始化函數(shù)為void USARTConfigurtion(void),具體代碼如下:

6.JPG

7.JPG

    初始化操作包括了時(shí)鐘初始化、中斷初始化,I/O接口初始化,串口初始化等。主程序在完成初始化操作后創(chuàng)建信號(hào)量、消息郵箱和任務(wù)創(chuàng)建。由于信號(hào)量、郵箱都是事件類(lèi)型,所以需用OS_EV-ENT來(lái)定義,信號(hào)量、郵箱的建立由函數(shù)App_EventCreate()完成。

    使用信號(hào)量和消息郵箱可以保持任務(wù)之間的通信的同步,串口數(shù)據(jù)發(fā)送任務(wù)App_TaskSendata(void-*p_arg)發(fā)送信號(hào)量App_UserIFSem通知數(shù)據(jù)發(fā)送控制任務(wù)App_TaskSendata Ctrl(void*p_arg),數(shù)據(jù)發(fā)送控制任務(wù)在接收到信號(hào)量App_User IFSem后,發(fā)送消息(www.Real Vie-w.com\n)給指定郵箱App_UserIFMbox,串口調(diào)用數(shù)據(jù)發(fā)送函數(shù)USART_Send Data(),串口數(shù)據(jù)發(fā)送任務(wù)數(shù)據(jù)發(fā)送完成后發(fā)送通知信號(hào)量App_ UserIFSeml給數(shù)據(jù)發(fā)送控制任務(wù),數(shù)據(jù)發(fā)送控制任務(wù)在接收到發(fā)送完成信號(hào)量App_UserIFSeml后,向指定郵箱發(fā)送另一則消息(www.xust.   edu.cn\n),數(shù)據(jù)發(fā)送任務(wù)在接收到消息郵箱后通過(guò)串口發(fā)送接收到的消息內(nèi)容給PC機(jī)。具體代碼如下:

8.JPG

 

9.JPG
    圖4為串口通信波特率設(shè)定為9 600 bps和115 200 bps時(shí),在串口小助手中觀(guān)察到的程序運(yùn)行后的測(cè)試結(jié)果,結(jié)果表明程序按照預(yù)先設(shè)定好的發(fā)送要求不斷向PC機(jī)發(fā)送數(shù)據(jù),并且通信穩(wěn)定,在測(cè)試過(guò)程中未出現(xiàn)亂碼和通信異常中斷情況,程序設(shè)計(jì)達(dá)到了預(yù)期目標(biāo)。通常在工業(yè)現(xiàn)場(chǎng)實(shí)際應(yīng)用中需要保證數(shù)據(jù)傳輸?shù)目煽啃?,一般都需要在?shù)據(jù)的發(fā)送和接收端對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的數(shù)據(jù)校驗(yàn),常見(jiàn)的數(shù)據(jù)校驗(yàn)算法是CRC校驗(yàn),可以采用8或16位的CRC校驗(yàn)方式。在該通信過(guò)程中并未使用校驗(yàn)算法來(lái)檢測(cè)數(shù)據(jù)傳輸?shù)囊恢滦?,若在?shù)據(jù)傳輸過(guò)程中添加相應(yīng)的CRC校驗(yàn)算法,就可以最大程度地減少數(shù)據(jù)傳輸?shù)恼`碼率,保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。在后期的研究學(xué)習(xí)中也可以嘗試將其應(yīng)用于工業(yè)現(xiàn)場(chǎng)以測(cè)試其工作的可靠性。

10.jpg

4 結(jié)論
    本文以STM32V評(píng)估板為硬件開(kāi)發(fā)平臺(tái),結(jié)合μC/OS-II嵌入式操作系統(tǒng)中信號(hào)量和消息郵箱,設(shè)計(jì)了基于信號(hào)量、消息郵箱的串口通信應(yīng)用程序,并通過(guò)實(shí)驗(yàn)驗(yàn)證了該串口應(yīng)用程序在保證任務(wù)間通信同步情況下,數(shù)據(jù)傳輸具有較好的穩(wěn)定性和可靠性,達(dá)到了程序設(shè)計(jì)預(yù)期目標(biāo)。
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。