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