ZigBee协议栈的串口实验
文章目錄
- 串口初始化
- 登記任務(wù)號(hào)
- 串口發(fā)送
??打開Z-stack目錄Projects\zstack\Samples\SamplesAPP\CC2530DB里面的SampleApp.eww工程,這次試驗(yàn)直接基于協(xié)議棧的SampleApp來修改的。打開工程后,workspace目錄下有兩個(gè)比較重要的文件夾,即Zmain和App。這里主要用到App,它是用戶自己添加自己代碼的地方,主要文件是SampleApp.c和SampleApp.h。
串口初始化
??我們?cè)趙orkspace下找到HAL\Target\CC2530EB\drivers的hal_uart.c,可以看到里面已經(jīng)包括了串口初始化、發(fā)送、接收等函數(shù)。再看看workspace上的MT層,發(fā)覺有很多基本函數(shù)前面帶MT,包括MT_UART.C。打開這個(gè)文件,看到MT_UartInit函數(shù),這里也有一個(gè)串口初始化函數(shù)。Z-stack上有一個(gè)MT層,用戶可以選用MT層配置和調(diào)用其他驅(qū)動(dòng),進(jìn)一步簡(jiǎn)化了操作流程。
??打開APP目錄下的OSAL_SampleApp.C文件,找到上節(jié)提到的osalInitTasks任務(wù)初始化函數(shù)中的SampleApp_Init函數(shù)。進(jìn)入這個(gè)函數(shù),發(fā)現(xiàn)原來在SampleApp.c文件中,我們?cè)谶@里加入串口初始化代碼。在函數(shù)中加入語句MT_UartInit();:
??進(jìn)入MT_UartInit函數(shù),修改自己想要的初始化配置:
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;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; #elseuartConfig.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 }- 第7行:uartConfig.baudRate = MT_UART_DEFAULT_BAUDRATE;是配置波特率,查看MT_UART_DEFAULT_BAUDRATE的定義,可以看到#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_38400,默認(rèn)的波特率是38400bps。現(xiàn)在修改成115200bps,修改成#define MT_UART_DEFAULT_BAUDRATE HAL_UART_BR_115200。
- 第8行:uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW;語句是配置流控,進(jìn)入定義可以看到#define MT_UART_DEFAULT_OVERFLOW TRUE,默認(rèn)是打開串口流控。如果你是只連了TX/RX的2根線方式,務(wù)必將流控進(jìn)行關(guān)閉,即#define MT_UART_DEFAULT_OVERFLOW FALSE。注意,2根線的通訊連接務(wù)一定要關(guān)閉流控,不然是永遠(yuǎn)收發(fā)不了信息的。
- 第14至20行:這個(gè)是預(yù)編譯,根據(jù)預(yù)先定義的ZTOOL或者ZAPP選擇不同的數(shù)據(jù)處理函數(shù)。后面的P1和P2則是串口0和串口1,在這里使用ZTOOL和串口0。可以在option -> C/C++ Compiler的Preprocessor里面看到,已經(jīng)默認(rèn)添加ZTOOL_P1預(yù)編譯:
登記任務(wù)號(hào)
??在函數(shù)SampleApp_Init剛添加的串口初始化語句下面加入MT_UartRegisterTaskID(task_id);/* 登記任務(wù)號(hào) */,意思就是把串口事件通過task_id登記在函數(shù)SampleApp_Init里面:
串口發(fā)送
??經(jīng)過前面兩個(gè)步驟,現(xiàn)在串口已經(jīng)可以發(fā)送信息了。我們?cè)趧倓偺砑映跏蓟a后面加入一條上電提示Hello World的語句HalUARTWrite(0, "Hello World\n", 12); /* 串口0, "字符", 字符個(gè)數(shù) */。注意,需要在SampleApp.c文件里加入頭文件MT_UART.h。下載并通過串口調(diào)試助手查看,可以看到輸出了Hello World。
總結(jié)
以上是生活随笔為你收集整理的ZigBee协议栈的串口实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zigbee协议栈串口收发 From z
- 下一篇: 数模(8)——排队论模型