日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZigBee组网学习笔记(三 )--协议栈串口实验

發布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZigBee组网学习笔记(三 )--协议栈串口实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

串口通訊的流控提供了由于某種原因不能進行通訊時阻塞通訊的一種機制。流控可以使數據接收設備在不能接收數據時通知數據發送設備,使其停止發送。串口的流控經常采用硬件流控和軟件流控兩種方式。開發串口通訊程序的過程中,可根據實際需要決定是否采用流控,采用硬件流控還是軟件流控。使用控件Mscomm32開發串口通訊程序簡單直接,若需要計算機協調與外設的數據傳數時,這種方法不能滿足要求;直接調用WIN32API函數的開發串口通訊程序,可以靈活的對串口進行設置,但需要較多的Windows編程背景知識。

1、串口初始化

以前,配置串口號、波特率、流控、校驗位,配置好寄存器,然后使用。?

現在,workspace下找到HAL\Target\CC2530EB\drivershal_uart.c文件,可以看到里面已經包括了串口初始化、發送、接收等函數。

workspace上的MT,發覺有很多基本函數,前面帶MT。包MT_UART.C,我們打開這個文件。看到MT_UartInit()函數,這里也有一個串口初始化函數,沒錯Z-stack上有一個MT層,用戶可以選用MT層配置和調用其他驅動。進一步簡化了操作流程。
***************************************************

SampApp.c

SampApp_Init()

SampApp_TransID() = 0;

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)//P1和P2則是串口0和串口1
? 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
}

?*************************************************** #define?MT_UART_DEFAULT_BAUDRATE?HAL_UART_BR_38400 默認的波特率是?38400bps, 我們修改成?115200bps,修改如下:#define?MT_UART_DEFAULT_BAUDRATE ?HAL_UART_BR_115200 *************************************************** #define??MT_UART_DEFAULT_OVERFLOW?TRUE默認是打開串口流控的, 如果你是只連了?TX/RX?2?根線的方式務必關流控,本功能底板 只連了?TX/RX?2?根線
#define??MT_UART_DEFAULT_OVERFLOW? FALSE
注意:?2?根線的通訊連接務必關流控,不然是永遠收發不了?信息的。


***************************************************

用?ZTOOL,串口?0。我們可以在?option——C/C++?的?CompilerPreprocessor?里 面看到,已經默認添加?ZTOOL_P1?預編譯。

?

***************************************************

2、登記任務號

void SampleApp_Init( uint8 task_id )

MT_UartInit();

MT_UartRegisterTaskID(task_id);//登記任務號

把串口事件通過 task_id 登記在 SampleApp_Init();


3、串口發送

void SampleApp_Init( uint8 task_id )

MT_UartInit();

MT_UartRegisterTaskID(task_id);//登記任務號

? ? ? ?HalUARTWrite(0, "Hello,world\n", 12); //(串口, 字符, 字符個數)

***************************************************

SampleApp.c

#include ?"MT_UART.h" //串口頭文件引用?

***************************************************

選擇 CoordinatorEB, 點解下載并調試,全速運行。可以看到串口助手收到信息。 發現?Hello?World?后面有一小段亂碼。這是?Z-stack ?MT?層定義的串口發送格式,還有液晶提示信息。如果不想要的可以在預編譯地方Project--Options--C/C++ Compiler--Preproce--Defined symbols 把?MT?和?LCD?相關內容注釋。如:
ZTOOL_P1
xMT_TASK
xMT_SYS_FUNC
xMT_ZDO_FUNC
xLCD_SUPPORTED=DEBUG

xMT_TASK:?表示沒有定義?MT_TASK,也就是不定義了。?

改好的重新編譯再下載,按復位鍵,觀察串口已經沒有亂碼了。

拓展:
我們在協議棧里再做一個測試,在?osal_start_system()函數里?for(;;)里加入:? HalUARTWrite(0,”Hello,World\n”,12);? 下載運行后發現串口不停地接收到?Hello,World。 這就證明了前一節的協議棧運行后會在這個函數里不停地循環查詢任務、執行任務。
這只是一個演示用的方法,實際應用中你可 千萬不能有把串口發送函數弄到這個位置,然后給?PC?發信息。 因為這 破壞了協議棧任務輪詢的工作原則,相當于我們普通單片機不停用?Delay?延時函數一樣,是極其低效的。

總結

以上是生活随笔為你收集整理的ZigBee组网学习笔记(三 )--协议栈串口实验的全部內容,希望文章能夠幫你解決所遇到的問題。

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