日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

学习记录 | ZigBee协议栈实践——串口收发数据

發(fā)布時間:2024/8/1 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习记录 | ZigBee协议栈实践——串口收发数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上次的理論知識學的有點雜亂

今天來跟著例程實踐看一看


目錄

一、ZigBee協(xié)議棧的安裝、編譯和下載

二、協(xié)議棧工作流程

三、串口通信主要代碼

1.串口打印

2.串口打印收到的數(shù)據(jù)

?四、實現(xiàn)

五、總結


一、ZigBee協(xié)議棧的安裝、編譯和下載

所謂安裝協(xié)議棧與平常安裝應用程序不一樣,其實把一些文件解壓到某個目錄下即為安裝完成

如上是開發(fā)板公司提供的工程解壓后的協(xié)議棧目錄

Components? 存放庫的文件夾

Documents? 放TI的開發(fā)文檔的文件夾,里面很多都是講述協(xié)議棧的API

Projects 存放TI協(xié)議棧的例程

Tools 放TI例程的一些上位機之類的程序作為工具使用

?帶協(xié)議棧的工程目錄的解釋如上,感覺挺有用的,第一次使用協(xié)議棧看到這么多文件夾看了這個解釋后腦子會比較清晰一些

二、協(xié)議棧工作流程

?

?用戶添加自己的應用任務程序在Zstack中的調用過程:

main() --->? osal_init_system() ---> osalInitTasks() ---> SampleApp_Init()

int main( void ) {// 關閉所有中斷osal_int_disable( INTS_ALL );//初始化系統(tǒng)時鐘HAL_BOARD_INIT();// 檢查芯片電壓是否正常zmain_vdd_check();// 初始化I/O LED Timer等InitBoard( OB_COLD );// 初始化芯片各硬件模塊HalDriverInit();// 初始化Flash存儲器osal_nv_init( NULL );// 初始化MAC層ZMacInit();// 確定 IEEE 64位地址zmain_ext_addr();#if defined ZCL_KEY_ESTABLISH// Initialize the Certicom certificate information.zmain_cert_init(); #endif// 初始化非易失變量zgInit();#ifndef NONWK// Since the AF isn't a task, call it's initialization routineafInit(); #endif// 初始化操作系統(tǒng)osal_init_system();// 使能全部中斷osal_int_enable( INTS_ALL );// 最終板載初始化InitBoard( OB_READY );// 顯示設備信息zmain_dev_info();/* Display the device info on the LCD */ #ifdef LCD_SUPPORTEDzmain_lcd_init(); //初始化LCD #endif#ifdef WDT_IN_PM1/* If WDT is used, this is a good place to enable it. */WatchDogEnable( WDTIMX ); #endifosal_start_system(); // No Return from here 執(zhí)行操作系統(tǒng) 進去之后不會返回return 0; // Shouldn't get here. } // main()

三、串口通信主要代碼

1.串口打印

//------------------------配置串口---------------------------------MT_UartInit(); //串口初始化MT_UartRegisterTaskID(task_id); //注冊串口任務HalUARTWrite(0,"UartInit OK\n", sizeof("UartInit OK\n"));//HalUARTWrite(0,"ALD UartInit OK ", sizeof("ALD UartInit OK ")-1);//-----------------------------------------------------------------

以上三行代碼即可實現(xiàn)串口打印信息 著重再看一看串口初始化 這里我覺得和STM32的串口初始化還挺像的 一定要注意波特率設置

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}

對了還得提起一個知識點 IAR 和 KEIL 的不同有一點在宏定義

?這里定義的是一些宏定義

?其中ZTOOL_P1 --- 串口0? ? ZTOOL_P2 --- 串口1?

2.串口打印收到的數(shù)據(jù)

這里需要自己寫一個串口接收回調函數(shù)

void rxCB( uint8 port, uint8 event ) {unsigned char buf[30];unsigned char len;len = HalUARTRead(0, buf, 30);//讀取串口數(shù)據(jù),返回數(shù)據(jù)長度if(len){HalUARTWrite(0, buf, len);//通過串口原樣返回數(shù)據(jù) 也可以修改數(shù)據(jù)返回用于區(qū)分數(shù)據(jù)len = 0;} }

?四、實現(xiàn)

?

五、總結

之前在STM32上用串口功能用的比較多,這是第一次用協(xié)議棧實現(xiàn)

但其實也是直接使用官方的例程 然后實現(xiàn)并理解 要是自己寫肯定也寫不來

總結

以上是生活随笔為你收集整理的学习记录 | ZigBee协议栈实践——串口收发数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。