日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 工業(yè)控制 > 工業(yè)控制
[導(dǎo)讀]摘要:TinyOS系統(tǒng)以其組件結(jié)構(gòu)模型、事件驅(qū)動、并發(fā)型等優(yōu)點成為目前最受關(guān)注的無線傳感器網(wǎng)絡(luò)操作系統(tǒng)。但TinyOS不支持STM32和CC2 520芯片。因此在分析TinyOS基本原理、NesC編程語言實現(xiàn)機制及其編譯過程的基礎(chǔ)上,

摘要:TinyOS系統(tǒng)以其組件結(jié)構(gòu)模型、事件驅(qū)動、并發(fā)型等優(yōu)點成為目前最受關(guān)注的無線傳感器網(wǎng)絡(luò)操作系統(tǒng)。但TinyOS不支持STM32和CC2 520芯片。因此在分析TinyOS基本原理、NesC編程語言實現(xiàn)機制及其編譯過程的基礎(chǔ)上,介紹了基于STM32和CC2520的TinyOS移植方法,完成了STM32的I/O組件、Timer組件、USART組件、SPI組件和CC2520芯片驅(qū)動的移植。在實現(xiàn)CC2520的基本通信功能基礎(chǔ)上,實現(xiàn)簡單MAC協(xié)議。最后測試了各組件的移植效果。實驗測試結(jié)果表明,節(jié)點可以穩(wěn)定可靠地通信。
關(guān)鍵詞:無線傳感器網(wǎng)絡(luò);TinyOS;STM32;CC2520;移植;驅(qū)動

引言
    無線傳感器網(wǎng)絡(luò)(Wireless Sensor Network,WSN)是一種應(yīng)用相關(guān)的網(wǎng)絡(luò)。需要對某些操作系統(tǒng)進行移植。本文采用TinyOS作為軟件平臺,成功移植了Radio、Timer、USART、SPI和General I/O等5個底層模塊。測試結(jié)果表明,移植的5個底層模塊能夠正常工作。

1 MCU和無線模塊介紹
   
STM32系列按性能分成兩個系列:STM32F103“增強型”系列和STM32F101“基本型”系列,時鐘頻率達到72 MHz,是同類產(chǎn)品中性能最高的產(chǎn)品。本項目采用芯片STM32F103RBT6。CC2520選用第二代ZigBee/IEEE 802.15.4無線電頻率(RF)收發(fā)器。

2 TinyOS操作系統(tǒng)和NesC分析
2.1 NesC介紹
    NesC是專門為網(wǎng)絡(luò)嵌入式系統(tǒng)設(shè)計的編程語言,是對C的擴展,它基于TinyOS的結(jié)構(gòu)化概念和執(zhí)行模型而設(shè)計。主要編程模式包括:事件驅(qū)動、彈性并發(fā)型和面向組件程序設(shè)計等。NesC編譯器進行數(shù)據(jù)競爭檢測(提高可靠性)、積極的函數(shù)內(nèi)聯(lián)(降低資源消耗)等整體程序分析,簡化了應(yīng)用程序的開發(fā)。
2.2 TinyOS分析
    TinyOS(Tiny Micro Threading Operating System)是由加州大學(xué)伯克利分校開發(fā)的開源的傳感器網(wǎng)絡(luò)操作系統(tǒng),其本身是由NesC語言編寫。TinyOS的組件模型體系結(jié)構(gòu)如圖1所示。上層組件對下層組件發(fā)命令,下層組件向上層組件發(fā)信號通知事件,最底層的硬件抽象組件直接和硬件打交道。


    TinyOS的硬件抽象層通常是3級抽象結(jié)構(gòu),稱作HAA(Hardware Abstraction Architecture)。整個硬件抽象層分為硬件表示層(HPL)、硬件適配層(HAL)和硬件接口層(HIL)。
    硬件表示層(Hardware Presentation Layer,HPL)是對硬件平臺的功能性描述,主要通過存儲單元和I/O映射端口訪問硬件和通過硬件中斷來實現(xiàn)以下功能:能量管理、控制硬件、硬件中斷開閉、提供硬件中斷服務(wù)程序等。
    在HPL上的是硬件適配層(Hardware Adaptation Layer,HAL),該層是整個硬件抽象層的核心,利用HPL提供的原始接口建立硬件描述資源,并通過狀態(tài)來反映硬件的使用情況以實現(xiàn)對硬件的仲裁控制,提高系統(tǒng)性能。
    硬件抽象層的最高層是硬件接口層(Hardware Interface Layer,HIL),該層把HAL層提供的接口轉(zhuǎn)換成硬件獨立的接口,隱藏了平臺之間的差異,并向上層提供統(tǒng)一的硬件API接口。

3 基于STM32和CC2520平臺的TinyOS實現(xiàn)
   
由上文所述,將TinyOS移植到STM32核處理器和CC2520上的關(guān)鍵問題是硬件抽象層組件的定制和編譯器工具鏈的配置。基于TinyOS開源代碼的約定,主要修改代碼放置在/tos/chips/STM32和tos/platforms/STM32p103。
3. 1 修改芯片文件
   
每個芯片都通過多個接口或組件提供它所實現(xiàn)的功能,這些接口或組件組成芯片的驅(qū)動。將芯片的結(jié)構(gòu)抽象文件放于tos/chips。如果芯片有子系統(tǒng)則建立子目錄,如:tos/chips/STM32/timer。需要改寫的TinyOS和MCU相關(guān)模塊如下所述。
3.1.1 STM32核處理器
   
為了同其他外圍設(shè)備的驅(qū)動分開,需要在MCU相關(guān)的文件中增加兩個定義;原子操作的開始和結(jié)束,在頭文件hardware.h中定義;低功耗工作模式,由組件MCUSleepC定義。具體可以參考其他MCU文件編寫。
    TinyOS通過一些接口管理MCU的狀態(tài),決定MCU何時進入低功耗狀態(tài)。MCUSleepC組件向上層提供McuSleep和McuPowerState接口。TinyOS調(diào)度器在原子操作中調(diào)用McuSleep.sleep(),保證在進入低功耗狀態(tài)前處于開中斷狀態(tài)。在sleep狀態(tài),可以關(guān)閉一些高耗能的模塊,比如:高頻時鐘、PLL等。
3. 1.2 修改I/O、LED燈、Timer、USART、SPI組件
   
(1)通用I/O接口
    HIL層組件通過3個接口描述MCU可以控制的通用輸入輸出引腳。General I/O接口描述輸入輸出引腳被清零或置位狀態(tài)、設(shè)置為輸入或輸出模式。GpioInterrupt接口描述單個引腳觸發(fā)的中斷,可以對每一個引腳分別配置為上升沿觸發(fā)或者下降沿觸發(fā)中斷。GpioCapture接口描述捕獲單個引腳發(fā)生的事件,可以對每一個引腳分別配置為上升沿觸發(fā)或者下降沿觸發(fā)。
    (2)LED燈
    TinyOS最多可獨立支持平臺上3個LED燈。TinyOS通過PlatformLedsC組件直接訪問3個LED燈,LedC和LedP組件再通過裝配PlatformLedsC組件,向上層組件提供Led接口,相當于General I/O接口的使用。在PlatformLedsC組件中,可以對每種開發(fā)板指定相應(yīng)的LED引腳。
    (3)Timer
    MCU時鐘通常有3種常見的功能:控制、時鐘/計數(shù)器、觸發(fā)。將與MCU時鐘相關(guān)的文件放到chips/STM32/timer。時鐘的通用功能通過一系列的接口定義實現(xiàn):
   
    (4)USART
    節(jié)點可以通過USART與PC通信,將與USART相關(guān)文件放于chips/STM32/uart。本文只通過HplSTM32UartNoDmaP組件的STM32Uart1C配件實現(xiàn)了簡單的USART功能。串口的初始化包括:波特率、字長、奇偶校驗位、流控制、打開串口時鐘和配置串口發(fā)送接收引腳等。
    (5)SPI
    由于CC2520通過SPI接口和MCU通信,所以必須實現(xiàn)SPI接口。SPI的初始化包括:時鐘信號的相位和極性、NSS模式、數(shù)據(jù)幀格式、主從模式等。
3.2 CC2520驅(qū)動
   
在tos/chips/cc2520中,定義與CC2520芯片相關(guān)的組件,這里面的組件直接對芯片進行操作。在tos/platforms/cc2520文件夾中定義CC2520和MCU交互的接口。CC2520通過SPI接口與STM32完成設(shè)置和收發(fā)數(shù)據(jù)兩方面的任務(wù)。
    CC2520工作流程如下:應(yīng)用程序中使用SplitControl接口,該接口最終連接到CCDriverLayerP上,在SoftwareInit.init中對CC2520使用的和MCU相連的引腳進行初始配置。
    首先,復(fù)位CC2520,并且關(guān)閉電壓調(diào)整器,根據(jù)Datasheet,延時1100 μs,延時通過接口BusyWait<T32khz,uint16_t>。延時完成后,開啟電壓調(diào)整器,并延時200μs后使能CC2520。完成后,申請SPI資源,該資源接口連接在CC2520DriverLayerP上,資源申請允許后,在CC25 20DriverLayerP中捕獲到SpiResource.granted事件,然后開始通過SPI接口初始化CC2520,調(diào)用startOscillator。之后,調(diào)用initRadio對CC2520的寄存器進行相應(yīng)配置。
    而在接收模式時,CC2520收到物理幀的SFD字段后,會在SFD引腳輸出高電平,直到接收完該幀。如果啟用了地址識別,在地址識別后,SFD引腳立即轉(zhuǎn)為輸出低電平。FIFO和FIFOP引腳標識FIFO緩存區(qū)的狀態(tài)。如果接收FIFO緩存區(qū)有數(shù)據(jù),F(xiàn)IFO引腳輸出高電平;如果接收FIFO緩沖區(qū)為空,F(xiàn)IFO引腳輸出低電平。TinyOS無線模塊組織架構(gòu)圖如圖2所示。


3.3 修改平臺文件
   
在tos/platforms下放置平臺相關(guān)文件,將物理驅(qū)動相關(guān)的組件連接起來組成具體平臺。創(chuàng)建一個平臺需要完成5個部分:
    ①“.platform”文件告知編譯系統(tǒng)驅(qū)動文件的位置,由一系列的包含路徑和NesC的參數(shù)組成。ncc將“.platform”文件當作perl腳本讀出,并將參數(shù)傳遞到NesC預(yù)編譯器。
    ②平臺導(dǎo)入程序PlatformP/PlatformC,通過調(diào)用兩個初始化接口platformC.Init和MainC.softwarelnit來激活MCU、傳感器和射頻等硬件模塊及相關(guān)軟件。platformC.Init通常完成時鐘校準和引腳設(shè)置,保證硬件在可操作狀態(tài)。
    ③與硬件具體功能相關(guān)的頭文件“hardware.h”和將芯片與平臺結(jié)合的具體代碼。“hardware.h”包含了其他硬件子系統(tǒng)的頭文件,并被主文件“MainC.nc”所包含。
    ④修改鏈接腳本文件,仿照其他平臺文件在tos/platforms文件夾下建立tos.x文件,設(shè)置rom和ram的起始地址和大小。設(shè)置中斷向量表、代碼段、數(shù)據(jù)段、非初始化數(shù)據(jù)段和其他段的放置位置。
    ⑤定義中斷向量表,在tos/platforms/STM32-p103/vectors文件夾下新建STM32-vector.c文件,用于放置中斷向量表,按照STM32提供的中斷配置中斷向量表,并初始化默認中斷處理函數(shù),實際應(yīng)用中這些中斷處理函數(shù)可以在其他文件中重定義。比如時鐘中斷處理函數(shù)在McuSleepC.nc中重定義。
3.4 修改編譯工具鏈
3.4.1 配置交叉開發(fā)工具鏈
   
STM32支持的編譯器有很多,比如:ARM—NONE—EABI—GCC、KEIL、IAR等。本文采用ARM—NONE—EABI—GCC編譯器。NesC程序的編譯主要分兩步,首先調(diào)用ncc編譯器把NesC預(yù)編譯成C文件(即預(yù)編譯過程);然后通過一個腳本程序,將經(jīng)過NesC預(yù)編譯生成的TinyOS應(yīng)用程序轉(zhuǎn)換成可以下載到開發(fā)板的hex格式文件;最后送入J—Flash ARM下載器下載到硬件。修改后的編譯工具鏈如圖3所示。


    下面對這個過程進行詳細的介紹。
    第一步:源組件文件(.nc源文件)的分析和轉(zhuǎn)換,在這個階段調(diào)用TinyOS自帶的編譯器ncc,對.nc源文件進行文法、語法分析,檢測共享數(shù)據(jù)緩沖區(qū)等。再根據(jù)各個組件和接口對其使用的函數(shù)和變量進行名字擴展,使其具有全局唯一性。最后把所有的函數(shù)和變量都整合到一個主函數(shù)main()中,并生成相應(yīng)的app.c文件。此時生成的已經(jīng)是普通的C語言程序。以上這個替換過程是由ncc的核心程序nescl.exe完成的。
    第二步:在生成app.c文件后,ncc調(diào)用arm—none—eabi—gcc的交叉編譯器工具對該C文件進行編譯、鏈接生成可執(zhí)行文件main.exe,然后通過arm—none—eabi—objcopy工具轉(zhuǎn)換成main.hex,以便最后下載到STM32平臺上運行調(diào)試。
3.4.2 定制編譯環(huán)境
   
為使編譯系統(tǒng)能夠?qū)ふ业骄幾g平臺,在工程主文件夾下增加環(huán)境定制文件“setup.sh”,定制工程目錄、編譯工具、解釋工具等路徑。在/support/make目錄增加“STM32-p103.target”文件。定制STM32的MAKE系統(tǒng)。在make文件中指定用arm—none—eabi—gcc為編譯器,arm-none-eabi-objcopy為輸出格式轉(zhuǎn)換器。
    以一個簡單的應(yīng)用程序radioCountToLeds為例,在STM32平臺上編譯的結(jié)果如圖4所示。


    可以通過TinyOS自帶的工具生成各個組件的連線關(guān)系,只需要在make命令后面添加docs選項。

4 測試
    TinyOS自帶的radioCountToLeds測試程序,需用通用I/O接口、Timer、Leds、SPI和無線模塊(CC2520)驅(qū)動等組件。為了查看USART模塊驅(qū)動,也為了便于跟蹤程序執(zhí)行流程,在源程序中加入了串口輸出代碼,結(jié)果如圖5所示。


    本實驗通過一個節(jié)點每一秒定時廣播數(shù)據(jù)包,定時器中斷觸發(fā)時發(fā)送一個16位的數(shù)據(jù),并把此數(shù)加1。其他節(jié)點接收此數(shù)據(jù),并根據(jù)接收數(shù)據(jù)的低3位是否為1來分別控制3個Led燈閃爍。通過觀察節(jié)點上Led燈的有規(guī)律閃爍,能夠證明各模塊成功移植。

結(jié)語
   
本文簡單介紹了NesC語言的特點和TinyOS系統(tǒng)架構(gòu),重點介紹了TinyOS的編譯機制,并在此基礎(chǔ)上詳細說明了將TinyOS內(nèi)核程序移植到以STM32核處理器和CC2520無線模塊芯片為核心的開發(fā)板上的具體方法。通過測試發(fā)現(xiàn),各個模塊能夠正常穩(wěn)定工作。但無線模塊協(xié)議棧還不夠完善,功能還不全面,仍需要進一步的研究。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復(fù)雜性成為開發(fā)者關(guān)注的焦點。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革。基于STM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當前智能家居產(chǎn)品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進行了改進 ,設(shè)計出基于STM32單片機的全 自動家用澆花機器人。該設(shè)計主要由機械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機械結(jié)構(gòu)通過麥克納姆輪底盤與噴灑裝置的結(jié)合實現(xiàn)機器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過性強

用c++編程似乎是讓你的Arduino項目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復(fù)雜電子項目的創(chuàng)建變成了拖動和連接塊的簡單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測、工業(yè)自動化等場景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實現(xiàn)高效休眠調(diào)度與動態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實時控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對時間敏感的應(yīng)用場景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動態(tài)響應(yīng)方向加速演進,STM32微控制器憑借其基于DSP庫的算法加速能力與對LLC諧振變換器的精準控制架構(gòu),成為優(yōu)化電源動態(tài)性能的核心平臺。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對電機控制場景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機控制領(lǐng)域的核心優(yōu)勢集中體現(xiàn)在FOC(磁場定向控制)算法的硬件加速引擎與PWM死區(qū)時間的動態(tài)補...

關(guān)鍵字: STM32 電機控制

無線充電技術(shù)加速滲透消費電子與汽車電子領(lǐng)域,基于Qi協(xié)議的無線充電發(fā)射端開發(fā)成為智能設(shè)備能量補給的核心課題。傳統(tǒng)模擬控制方案存在響應(yīng)滯后、參數(shù)調(diào)整困難等問題,而基于STM32的數(shù)字PID控制結(jié)合FOD(Foreign O...

關(guān)鍵字: STM32 無線充電
關(guān)閉