999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于雙緩沖器的UART無線模塊設計

2015-03-31 18:42:54鄔芝權靳桅
現代電子技術 2015年5期

鄔芝權 靳桅

摘 要: 在無線通信環境下,基于UART接口的無線模塊可以釋放CPU軟硬件資源、使用方便、用途廣泛。通過介紹一種廉價的無線模塊設計方案,根據nRF24L01 封裝無線數據包和UART接口速度慢的特點,設計了對UART數據的發送和接收雙緩沖器,開發軟硬件,實現了可靠的無線數據通信。實驗表明無線模塊UART接口的可靠通信速率可以達到128 000 b/s,達到預期效果,滿足大部分網絡化條件下無線通信功能要求。

關鍵詞: UART; NRF24L01; 緩沖器; 無線模塊

中圖分類號: TN911?34; TP368.1 文獻標識碼: A 文章編號: 1004?373X(2015)05?0005?04

Design of UART wireless module based on double buffers

WU Zhi?quan, JIN Wei

(Department of Computer and Communication Engineering in Emei Branch, Southwest Jiaotong University, Emei 614202, China)

Abstract: In the wireless communication environment, the wireless module based on UART interface can release the hardware and software resources of CPU. It′s easy to use, and has a wide range of applications. A low cost scheme to design wireless module is introduced in this paper. According to the encapsulation wireless data packet of nRF24L01 and the slow?speed feature of the UART interface, the double?buffer transmitting and receiving the UART data was designed, the corresponding software and hardware were developed, and the reliable wireless data communication was realized. Experiments show that the wireless module with UART interface achieves the desired effect, which implements a reliable transmission rate of [128 000 b/s,]and meets the most requirements of wireless communication function.

Keywords: UART; NRF24L01; buffer; wireless module

0 引 言

隨著物聯網技術發展需要,2.4 GHz 頻段的無線應用得到了空前發展,無線空中傳輸速率較快,無線模塊提供給用戶使用的大多為SPI接口。相對于UART接口來說,SPI接口采用同步串行傳輸,傳輸速度較快,但是通信時傳輸距離短、要占用更多的CPU、內存和I/O接口資源。UART接口是全雙工異步接口,大部分MCU自帶這種接口,使用時編程簡單,占用內存少。根據用戶需要,可以將UART接口轉換為RS 232電平或RS 422電平,延長傳輸距離,所以UART接口在控制類領域仍大量使用。

基于UART接口的無線模塊,不用設計額外的電路和程序,可以按有線方式使多個節點進行通信,并且受地理條件限制少、安裝靈活。本文依據市場發展需求,研究和設計了一種基于STC15W204S單片機和nRF24L01無線射頻收發芯片實現的小成本、低功耗UART無線模塊。

1 UART無線模塊傳輸數據面臨的問題及解決

方案

UART無線模塊接口示意如圖1所示,單片機STC15W204S一方面接收UART接口的數據和配置命令,另一方面通過SPI接口與nRF24L01進行通信,傳送數據、命令、啟動發送和檢測接收等功能。在設計時一方面要解決各種接口速度不匹配問題,另一方面還要盡量提高數據傳輸速度。

1.1 速度匹配問題

通過對UART、SPI和無線這三種通信模式的數據傳輸速度分析來看,SPI通信的速度是由STC15W204S提供的時鐘信號決定的,可以達到5 Mb/s;nRF24L01的無線數據包空中速率可以設置為250 Kb/s,1 Mb/s和2 Mb/s,速度雖然快,但數據是以數據包方式在空中傳輸,不具備連續性;UART傳送數據的速度范圍為每秒幾百位到1.5 Mb/s,其速率受發送和接收線對距離(線長度)的影響非常大,常用速度一般不會超過128 Kb/s。由于三種通信模式的數據傳輸速度不一致,在數據傳輸過程中難免會有部分數據積壓,需要合理的設置一段存儲區來處理數據。

1.2 無線通信有效數據傳輸速率問題

nRF24L01的無線數據包包含前導碼、地址、標志位、數據(1~32 B)和校驗,發射時消耗在啟動、發送接收模式切換和應答時間較長。由于數據包中數據長度可以設置1~32 B,其有效數據傳輸率相差很大。下面以發送一包數據時序來分析其有效數據傳輸速率,如圖2所示,為增強型SchockBurstTM模式發送一個有效字節的數據包所需時間為339 μs,每增加一個有效字節僅需4 μs,設發送一包數據的時間為[TECB,]MCU上傳數據至nRF24L01的時間為[TUL,]發送的有效字節數為[N,]則根據時序圖可以得到公式(1):

當STC15W204S的晶振設為22.118 4 MHz時,經編程測試,[TUL]消耗時間為250 μs,故[TECB=250+][335+4N=][585+4N。]

其有效數據通信頻率設為[F,]則得到公式(2):

[F=106TECB?N×8] (2)

將[TECB]的值代入公式(2)得到:

[F=106(585+4N)?N×8] (3)

當[N=1 ]B時,[F=]13.582 Kb/s;

當[N=32 ]B時,[F=]359.04 Kb/s。

由此可見,數據長度的大小很大程度上影響了無線數據傳輸效率,一個數據包中數據長度越大,則數據傳輸效率越高。

為了提高數據傳輸速率,每個無線數據包盡量包含更多的有效數據,但是兩個無線數據包之間會有一定時間間隔,如果每個數據包都按最大有效數據量來打包,當UART接收數據量達不到打包條件時,則會使程序處于等待打包狀態,即使可以增加延時退出程序來解決,由于消耗CPU時間較長導致實時性差。

如果每從UART接收一個數據就打包發送,雖然實時性高,但傳輸效率很差,經測試,在這種情況下,UART速度最大可設置為4 800 b/s。

所以在無線數據打包時,變長長度的數據包可以有效地解決數據傳輸速度和實時性問題。

2 解決方案

STC15W204S單片機的UART為全雙工通信方式,但發送和接收緩沖器只有1個字節,為了解決數據傳輸的速度匹配和無線數據實時性較差這兩個問題,需要設計一個緩沖區對接收和發送的數據進行緩存。在設計緩沖區時,除了考慮其大小來滿足通信需要,還要考慮如何減少CPU處理數據的時間。首先確定UART數據緩沖區大小,設置數據寫入和讀出操作指針,指針通過取模的方式循環指向緩沖區內的位置。當接收新數據時,數據寫入指針通過加1取模調整,然后寫入數據,當從緩沖區讀數據時,數據讀出指針通過加1取模調整,然后取出數據。這樣,緩沖區內部數據不需要進行移動,大大節省了CPU處理數據的時間。

當UART向無線接口發送數據時,將無線數據包的數據長度設置為32個字節,最后1個字節定義為有效數據長度,為了保障通信的實時性,只要UART接收緩沖區中有數據就啟動一次無線打包發送程序,將數據全部打包傳輸,數據包的長度是變長的,不超過31個字節,最后1個字節為有效數據長度。這樣既提高了數據傳輸效率,又保證傳輸實時性。

3 程序設計

在RAM中定義兩個存儲區,一個為接收緩沖區,一個為發送緩沖區。接收緩沖區長度宏定義為RECV_BUF_ LEN,發送緩沖區長度定義為TRANS_BUF_LEN,具體值通過宏定義設置。定義變量Recv_In_Pointer和Recv_Out_Pointer分別為接收緩沖區數據寫入和讀出指針,Trans_In_Pointer和Trans_Out_Pointer為發送緩沖區數據寫入和讀出指針,調整指針后,對指針取模,則指針固定指向某個范圍區域,構成循環緩沖區。下面討論UART接收數據緩沖區工作原理。

為了避免UART的接收和發送數據時使CPU處于等待狀態,UART的接收和發送采用中斷模式,在中斷服務程序中再判斷是接收中斷還是發送中斷。如果是接收中斷則將UART數據寫入接收緩沖區,并調整寫入數據指針,使之指向下一個空數據項。如果是發送中斷,則調整數據讀出指針,如果發送緩沖區沒有數據,則將發送數據結束標志置位。

設置RECV_BUF_LEN=16,在接收數據緩沖區,其初始狀態為輸入指針Recv_In_Pointer和輸出指針Recv_Out_職Pointer都指向接收緩沖區位置0處,如圖3(a)所示。當UART接收到數據,進入UART中斷服務程序,將數據寫入接收緩沖區Recv_In_Pointer指向的位置,然后調整指針Recv_In_Pointer,使其指向空數據項,同時將位變量Recv_End置1,表示接收緩沖區已有新數據,如圖3(b)所示。當接收緩沖區有數據(Recv_End=1),CPU處理UART數據時,從接收緩沖區Recv_Out_Pointer指向的位置讀出數據,然后調整指針Recv_Out_Pointer,使其指向下一個數據項,當Recv_In_Pointer和Recv_ Out_Pointer的值相同則表示接收緩沖區中無數據,同時將Recv_End清1。如果CPU不及時處理接收緩沖區中的數據,當UART接收數據過多時,就會使接收緩沖區溢出,如圖3(d)所示。

下面介紹從UART接收到無線發送的部分程序。

UART中斷接收部分程序如下:

void Serial_Int(void) interrupt 4 //串行口中斷服務程序

{

if (_testbit_(RI)) //接收中斷

{

Recv_Buf[Recv_In_Pointer]=SBUF;

//接收數據入接收緩沖區

Recv_Data=Recv_Buf[Recv_In_Pointer]; Recv_In_Pointer=(Recv_In_Pointer+1)%RECV_BUF_LEN;

Recv_End=1; //置串行口接收完成標志

}

……

}

CPU從UART讀出一個字節程序如下:

unsigned char Serial_In(void)

{

unsigned char Temp_Data;

while ( Recv_Out_Pointer==Recv_In_Pointer ) ;

//無數據等待

Temp_Data=Recv_Buf[Recv_Out_Pointer];

//從接收緩沖區中讀數據

Recv_Out_Pointer=(Recv_Out_Pointer+1)%RECV_BUF_ LEN;

if (Recv_Out_Pointer==Recv_In_Pointer )

Recv_End=0;

return Temp_Data; //返回接收數據

}

在無線打包程序設計過程中,數據包最大數據長度為32 B,采用變長數據發送模式,將數據包的最后1個字節用來表示有效數據長度,有效數據長度宏定義為TX_PLOAD_WIDTH,可以在編譯之前設置,最大長度為31 B,無線打包發送程序如下:

if (Recv_End) //判斷串行口緩沖器中是否有接收數據

{

if (nRF24L01_Tx_End==1)

{

Recv_Char = Serial_In(); //讀UART接收數據

Tx_Buf[0] = Recv_Char; //寫入無線發送緩沖區

nRF24L01_Tx_Len=1; //無線初始發送設置為1

while (Recv_End==1) //判斷接收緩沖器還有數據

{

Tx_Buf[nRF24L01_Tx_Len]=Serial_In();

//寫無線緩沖區

nRF24L01_Tx_Len++;

//無線發送有效數據長度加1

if (nRF24L01_Tx_Len>=(TX_PLOAD_WIDTH-1))

//過長

{

break;

}

}

Tx_Buf[TX_PLOAD_WIDTH-1]=Nrf24L01_Tx_Len;

//將無線發送緩沖區最后一個字節置為無線

發送的有效數據長度

nRF24L01_TxPacket(Tx_Buf);

//將啟動nRF24L01發送

nRF24L01_Tx_End=0; //無線發送模式結束

}

對于UART發送數據緩沖區,它的工作是接收無線數據包至無線接收緩沖區,然后對數據進行分析,提取有效數據,通過UART口發出。由于無線數據包數據項的最后一個字節表示有效數據長度,通過這個字節就可以知道應該從無線接收緩沖區取出多少字節的數據。單片機在這方面處理的速度遠遠高于無線打包程序處理速度,所以這方面程序不需要過多優化。

4 測 試

測試時采用長數據串連續傳輸,傳輸時會將數據分成多個數據包,根據UART接收數據量的多少變長打包,當UART接收數據速度越快,則無線數據包中含有的有效數據量越大。由于無線數據包中的數據長度設置為32個字節,最后1個字節表示有效數據個數,只要有效數據量不超過31,就說明緩沖區不會溢出。

將兩個UART無線模塊連接至計算機,在程序代碼中插入測試代碼,將數據包中有效數據量返回,使用串口調試軟件進行數據通信測試。其中一個無線模塊用于接收數據,如圖4(a)所示,串口號為COM8,另一個無線模塊用于發送數據,如圖4(b)所示,串口號是COM9,串口速率都設置為128 000 b/s,連續發送1 000個字符數據用于測試。測試結果表明,無線數據發送時封裝為70個數據包,其中數據包最大有效數據長度為15,小于31個,從COM8接收到的數據也是1 000個字符,說明無線模塊在該速率下傳輸是準確、可靠的。

根據這個方法對不同速率情況下,數據傳輸和打包情況測試結果如表1所示。

該結果說明當速率設置為4 800 b/s及以下時,可以實現串口數據實時打包傳輸,即每接收一個串口數據就立刻打包從無線端口送出,不需要設置緩沖區。當速率設置為9 600 b/s及以上時,會出現幾個數據封裝為一個無線數據包的情況,這種情況就必須要設置UART接收和發送緩沖區,才能實現可靠傳輸。

5 結 語

本無線模塊經過多次測試檢驗是非常可靠的。考慮到無線模塊不同的使用用戶,作者為無線模塊編寫了配置程序,配置信息保存在E2PROM。配置內容包括波特率、無線頻道、發送和接收通道地址、接收運行和自動應答等,用戶在使用時只需配置一次即可。作者設計時采用了STC新款寬電壓1T單片機STC15W204S,工作可靠,速度快,價格便宜。由于無線模塊采用UART接口后,用戶只需要安裝UART接口編程即可,不用考慮無線數據收發問題,使用非常方便。

參考文獻

[1] 李輝,宋詩,周建江.基于ARM和nRF24L01的無線數據傳輸系統[J].國外電子元器件,2008(12):44?46.

[2] 曾勇,楊濤,馮月暉.基于nRF24L01的超低功耗無線傳感器網絡節點設計[J].電子技術應用,2008(7):45?48.

[3] 劉志平,趙國良.基于nRF24L01的近距離無線數據傳輸[J].應用科技,2008(3):55?58.

[4] 劉超偉,趙俊淋,易衛東.基于nRF24L01的無線圖像傳感器節點設計實現[J].電子測量技術,2008(6):136?139.

[5] 黃秀節,顏可煌,趙偉.基于nRF24L01的無線USB控制系統[J].國外電子測量技術,2009(12):43?46.

[6] 韋積慧.基于nRF24L01的無線網絡設計與實現[D].長春:吉林大學,2012.

[7] 郝文延,焦明華.基于DSP和nRF24L01的無線環境監測系統設計[J].單片機與嵌入式系統應用,2011(3):51?54.

[8] 楊旭,李德敏,張謙益.基于nRF24L01的一種無線通信協議設計[J].通信技術,2011(7):57?59.

[9] 朱慧彥,林林.基于MCU和nRF24L01的無線通信系統設計[J].電子科技,2012(4):81?83.

主站蜘蛛池模板: 四虎成人免费毛片| 波多野结衣一级毛片| 97国产成人无码精品久久久| 久久a级片| 午夜欧美在线| 午夜精品福利影院| 亚洲免费人成影院| 成人韩免费网站| av无码久久精品| 国产福利不卡视频| 精品视频91| 国产精品白浆在线播放| 国产精品久线在线观看| 精品色综合| 日韩色图在线观看| 国产打屁股免费区网站| 一区二区三区精品视频在线观看| 国产内射在线观看| 亚洲成aⅴ人片在线影院八| 人人澡人人爽欧美一区| 国产Av无码精品色午夜| 久久国产香蕉| 热re99久久精品国99热| 国产午夜人做人免费视频| 欧美视频在线观看第一页| 国产精品毛片在线直播完整版| 亚瑟天堂久久一区二区影院| 91无码国产视频| 久久福利网| 手机在线免费不卡一区二| A级毛片高清免费视频就| 欧美一区二区三区不卡免费| 国产精品吹潮在线观看中文| 日韩精品无码免费一区二区三区 | 最新亚洲人成网站在线观看| www.91在线播放| 亚洲AV无码一区二区三区牲色| 中文成人在线视频| 草逼视频国产| 亚洲不卡无码av中文字幕| 色综合国产| 国产精品免费露脸视频| 国产va免费精品| 白丝美女办公室高潮喷水视频| 欧美在线一二区| 91精品国产丝袜| 91久久精品国产| 国内精品91| 综合色亚洲| 在线观看免费国产| 美女被躁出白浆视频播放| 九九热精品在线视频| 男女男免费视频网站国产| 日韩在线第三页| 精品乱码久久久久久久| 色天天综合| 日韩性网站| 毛片在线播放a| av一区二区三区高清久久| 精品久久综合1区2区3区激情| 久久公开视频| 色婷婷亚洲综合五月| 黄色三级毛片网站| 在线观看免费人成视频色快速| 超清无码熟妇人妻AV在线绿巨人| 久久国产高清视频| 91激情视频| 国产精品女熟高潮视频| 欧美成人二区| 久久久久国产一区二区| 全部免费特黄特色大片视频| 日本精品中文字幕在线不卡| 亚洲最大情网站在线观看| 狠狠操夜夜爽| 国产00高中生在线播放| 亚洲天堂精品在线| 97视频在线观看免费视频| 亚洲精品欧美日本中文字幕| 午夜在线不卡| 人妻少妇乱子伦精品无码专区毛片| 国产精彩视频在线观看| 伊人久久久久久久久久|