協(xié)議棧中串口實驗之串口發(fā)送

串口是開發(fā)過程中必不可少的工具,在學習Zigbee應用的過程中也是一樣。正所謂工欲善其事必先利其器科盛,那么在正式學習其他內(nèi)容之前,先在協(xié)議棧中打造自己的串口功能吧2嗽怼(p.s.注意與裸機串口通信的實現(xiàn)方法區(qū)別開來U昝唷)
  打開目錄\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\SampleApp\CC2530DB下的SampleApp.eww工程,基于原有協(xié)議棧進行修改。

Step 1 串口初始化

串口初始化無非是配置串口號恍飘、設置波特率榨崩、數(shù)據(jù)位停止位常侣、校驗位蜡饵、流控等等,一般比較常用的波特率為115200胳施,傳輸模式采用8N1溯祸,即8位數(shù)據(jù)位無校驗位舞肆、無流控焦辅、1位停止位。那么具體到工程里該怎么配置呢椿胯?
  以前需要自己來配置相關(guān)的寄存器筷登,現(xiàn)在協(xié)議棧已經(jīng)完成了相關(guān)寄存器的配置,我們只需要調(diào)用協(xié)議棧已經(jīng)實現(xiàn)的函數(shù)即可完成串口的初始化哩盲。打開Workspace下HAL->Target->CC2530EB->Drivers中的hal_uart.c文件前方,可以發(fā)現(xiàn)與串口操作相關(guān)的函數(shù)狈醉,如串口初始化函數(shù)void HalUARTInit(void)、串口發(fā)送函數(shù)uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)惠险、串口接收函數(shù)uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len)等等苗傅。
  為了進一步簡化操作流程,協(xié)議棧抽象出了一個MT層班巩,用戶可在該層進行串口配置或者調(diào)其他驅(qū)動渣慕。在MT_UART.c中找到void MT_UartInit ()函數(shù),這就是MT層的串口初始化函數(shù)抱慌。

/***************************************************************************************************
 * @fn      MT_UartInit
 *
 * @brief   Initialize MT with UART support
 *
 * @param   None
 *
 * @return  None
***************************************************************************************************/
void MT_UartInit ()
{
  halUARTCfg_t uartConfig;

  /* Initialize APP ID */
  App_TaskID = 0;

  /* UART Configuration */
  uartConfig.configured           = TRUE;
  uartConfig.baudRate             = MT_UART_DEFAULT_BAUDRATE;//波特率
  uartConfig.flowControl          = MT_UART_DEFAULT_OVERFLOW;//流控制逊桦,若只連接Rx/Tx鞍恢,則需關(guān)閉此選項
  uartConfig.flowControlThreshold = MT_UART_DEFAULT_THRESHOLD;
  uartConfig.rx.maxBufSize        = MT_UART_DEFAULT_MAX_RX_BUFF;
  uartConfig.tx.maxBufSize        = MT_UART_DEFAULT_MAX_TX_BUFF;
  uartConfig.idleTimeout          = MT_UART_DEFAULT_IDLE_TIMEOUT;
  uartConfig.intEnable            = TRUE;
#if defined (ZTOOL_P1) || defined (ZTOOL_P2)
  uartConfig.callBackFunc         = MT_UartProcessZToolData;
#elif defined (ZAPP_P1) || defined (ZAPP_P2)
  uartConfig.callBackFunc         = MT_UartProcessZAppData;
#else
  uartConfig.callBackFunc         = NULL;
#endif

  /* Start UART */
#if defined (MT_UART_DEFAULT_PORT)
  HalUARTOpen (MT_UART_DEFAULT_PORT, &uartConfig);
#else
  /* Silence IAR compiler warning */
  (void)uartConfig;
#endif

  /* Initialize for ZApp */
#if defined (ZAPP_P1) || defined (ZAPP_P2)
  /* Default max bytes that ZAPP can take */
  MT_UartMaxZAppBufLen  = 1;
  MT_UartZAppRxStatus   = MT_UART_ZAPP_RX_READY;
#endif
}

函數(shù)本身已有比較詳細的注釋属百,函數(shù)名以及變量名也很直觀,在此不在贅述篙悯。值得注意的是
  1.默認的串口波特率是38400bps单匣,所以需要手動更改為我們需要的115200bps夕凝。在MT_UART_DEFAULT_BAUDRATE上右鍵Go to definition of MT_UART_DEFAULT_BAUDRATE,將宏定義MT_UART_DEFAULT_BAUDRATE的值更改為HAL_UART_BR_115200户秤,即#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_115200码秉。
  2.需要將默認流控所對應的宏定義MT_UART_DEFAULT_OVERFLOW的值更改為FALSE,即關(guān)閉串口流控鸡号。特別是采用Rx/Tx兩根線的方式進行通信時必須關(guān)閉流控转砖,否則不能發(fā)送信息。
 【ò椤3.根據(jù)預編譯府蔗,我們選擇ZTOOL,所以需要在option->C/C++ compiler的Preprocessor里添加ZTOOL_P1預編譯選項(默認已添加)汞窗,如下圖姓赤。

添加ZTOOL_P1預編譯選項

  修改好以上內(nèi)容后,就需要在合適的位置調(diào)用void MT_UartInit ()函數(shù)來完成串口的初始化仲吏。打開App中的SampleApp.c文件不铆,找到用戶自定義應用初始化函數(shù)SampleApp_Init( uint8 task_id ),在OSAL分配任務ID裹唆、設置設備初始狀態(tài)以及消息發(fā)送ID后添加串口初始化函數(shù)void MT_UartInit ()誓斥,見下圖。

添加串口初始化函數(shù)

  因為使用了MT層的函數(shù)许帐,所以不要忘了在SampleApp.c文件的開頭包含頭文件

#include "MT_UART.h"
#include "MT.h"

Step 2 登記任務號

在剛剛添加串口初始化函數(shù)語句的下面添加

MT_UartRegisterTaskID(task_id);//登記任務號劳坑,注冊串口任務

即完成該任務號task_id與串口事件的綁定。

Step 3 通過串口發(fā)送消息

在上述語句后面繼續(xù)添加

    HalUARTWrite(0,"UartInit OK!\n",sizeof("UartInit OK!\n"));//串口發(fā)送

至此成畦,代碼修改完成距芬,請看下圖完整版

串口配置及發(fā)送

Step 4 上電調(diào)試

連接仿真器和 USB 轉(zhuǎn)串口線涝开,選擇任意工程(除DemoEB外),點擊下載并調(diào)試蔑穴,全速運行后產(chǎn)看串口收到的信息

串口信息

  從上圖可以看出忠寻,除了我們發(fā)送的UartInit OK!外惧浴,還多出了一些亂碼存和。這是Zstack在MT層定義的串口發(fā)送格式,這些亂碼里面還包含液晶提示信息衷旅。搞清楚原因之后捐腿,對癥下藥,在option->C/C++ compiler的Preprocessor里將與MT和LCD相關(guān)的預編譯選項注釋掉即可柿顶,注釋方法只需要在相應的預編譯選項的前面加上x茄袖,直接看圖吧!

取消與MT和LCD相關(guān)的預編譯選項

  再重新Rebuild All,點擊下載并調(diào)試嘁锯,再次查看串口收到的信息

串口信息

  大功告成宪祥!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市家乘,隨后出現(xiàn)的幾起案子蝗羊,更是在濱河造成了極大的恐慌,老刑警劉巖仁锯,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耀找,死亡現(xiàn)場離奇詭異,居然都是意外死亡业崖,警方通過查閱死者的電腦和手機野芒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來双炕,“玉大人狞悲,你說我怎么就攤上這事「窘铮” “怎么了摇锋?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趟济。 經(jīng)常有香客問我乱投,道長,這世上最難降的妖魔是什么顷编? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任戚炫,我火速辦了婚禮,結(jié)果婚禮上媳纬,老公的妹妹穿的比我還像新娘双肤。我一直安慰自己施掏,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布茅糜。 她就那樣靜靜地躺著七芭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔑赘。 梳的紋絲不亂的頭發(fā)上狸驳,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音缩赛,去河邊找鬼耙箍。 笑死,一個胖子當著我的面吹牛酥馍,可吹牛的內(nèi)容都是我干的辩昆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼旨袒,長吁一口氣:“原來是場噩夢啊……” “哼汁针!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砚尽,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤施无,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尉辑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帆精,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年隧魄,在試婚紗的時候發(fā)現(xiàn)自己被綠了卓练。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡购啄,死狀恐怖襟企,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狮含,我是刑警寧澤顽悼,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站几迄,受9級特大地震影響蔚龙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜映胁,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一木羹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦坑填、人聲如沸抛人。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妖枚。三九已至,卻和暖如春苍在,著一層夾襖步出監(jiān)牢的瞬間绝页,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工忌穿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抒寂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓掠剑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親郊愧。 傳聞我的和親對象是個殘疾皇子朴译,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 目的借助于協(xié)議棧快速搭建自己的串口接收属铁。前期的初始化和《協(xié)議棧中串口實驗之串口發(fā)送》實驗是相同的眠寿,簡要回顧一下:一...
    羽墨志閱讀 2,327評論 0 1
  • ●通過ZigBee協(xié)議棧實現(xiàn)一個簡單的無線數(shù)據(jù)通信的時候怎么做? ①組網(wǎng):調(diào)用協(xié)議棧的組網(wǎng)函數(shù)焦蘑、加入網(wǎng)絡函數(shù)盯拱,實現(xiàn)...
    康雙全閱讀 4,929評論 0 6
  • SPI通信實驗 SPI簡介 串行外設接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb閱讀 9,385評論 1 12
  • ADX345使用IIC讀取數(shù)據(jù) IIC配置 方法一:使用IO模擬IIC操作 彩屏顯示使用之前修改好的ili9325...
    停下浮躁的心閱讀 598評論 0 0
  • 姓名:周崇杰 學號:16040120059 專業(yè):機械設計制造及其自動化 轉(zhuǎn)載自:http://blog.csd...
    CJbaby閱讀 1,460評論 0 6