上次的理论知识学的有点杂乱

今天来跟着例程实践看一看


目录

一、ZigBee协议栈的安装、编译和下载

二、协议栈工作流程

三、串口通信主要代码

1.串口打印

2.串口打印收到的数据

四、实现

五、总结


一、ZigBee协议栈的安装、编译和下载

所谓安装协议栈与平常安装应用程序不一样,其实把一些文件解压到某个目录下即为安装完成

如上是开发板公司提供的工程解压后的协议栈目录

Components  存放库的文件夹

Documents  放TI的开发文档的文件夹,里面很多都是讲述协议栈的API

Projects 存放TI协议栈的例程

Tools 放TI例程的一些上位机之类的程序作为工具使用

带协议栈的工程目录的解释如上,感觉挺有用的,第一次使用协议栈看到这么多文件夹看了这个解释后脑子会比较清晰一些

二、协议栈工作流程

用户添加自己的应用任务程序在Zstack中的调用过程:

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

int main( void )
{// 关闭所有中断osal_int_disable( INTS_ALL );//初始化系统时钟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// 初始化操作系统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 执行操作系统 进去之后不会返回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);//-----------------------------------------------------------------

以上三行代码即可实现串口打印信息 着重再看一看串口初始化 这里我觉得和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.串口打印收到的数据

这里需要自己写一个串口接收回调函数

void rxCB( uint8 port, uint8 event )
{unsigned char buf[30];unsigned char len;len = HalUARTRead(0,  buf, 30);//读取串口数据,返回数据长度if(len){HalUARTWrite(0, buf, len);//通过串口原样返回数据 也可以修改数据返回用于区分数据len = 0;}
}

四、实现

五、总结

之前在STM32上用串口功能用的比较多,这是第一次用协议栈实现

但其实也是直接使用官方的例程 然后实现并理解 要是自己写肯定也写不来

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

  1. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  2. STM32 HAL库串口收发数据

    STM32 HAL库串口收发数据 许多传感器的使用方法是:单片机给传感器发送一帧数据,然后传感器返回单片机一帧有用数据,所以串口的收发功能十分重要. STM32cubeMX的配置 时钟和下载方式就不讲 ...

  3. MTK:UART串口收发数据

    MTK之UART串口收发数据 转:https://blog.csdn.net/ivy_reny/article/details/51192110 寄存器 UARTn_RBR: Rx Buffer Re ...

  4. c语言接收串口数据信息,C51通用串口收发数据C语言程序

    #include //C51通用串口收发数据C语言程序模块 #define  uchar unsigned char #define uint unsigned int uchar shu; bit ...

  5. c8051f020C语言程序,C8051F020编程UART串口收发数据

    C8051F020编程UART串口收发数据 我编了一个 老是编译不过去 求高手改正 我用的是UART0端口 方式2 程序如下 //>>UART0串口编程--向PC发送和接受字符串<& ...

  6. STM32F103学习记录——通过额外添加串口接口来接入ZigBee/蓝牙模块实现数据的远程传输

    目录 项目场景 硬件准备 实现过程 实现缘由 原理展现 成果展现 USB-TTL模块有线数据展示 ZigBee模块远程传输数据展示 最后总结 项目场景 本人在做STM32硬件开发项目中,传输数据这一块 ...

  7. ESP32学习记录<三>串口通信

    ESP32学习记录<三>串口通信 文章目录 ESP32学习记录<三>串口通信 前言 一.通过串口打印出数据 1.初始化串口 2.打印数据 二.串口控制LED亮灭 1.接收串口发 ...

  8. QT5实现串口收发数据(上位机与下位机通信)

    最近帮老师做一个应用程序,通过上位机与下位机进行串口通信,最后实现实时绘图,通过几天努力,成功实现蓝牙串口通信. 参考博客1 注意:代码中一些与串口无关代码,可以忽略掉 一.QT5串口基础知识 1. ...

  9. MTK之UART串口收发数据

    寄存器 UARTn_RBR: Rx Buffer Register,通过读取该寄存器接收数据.要求LCR[7]=0.  UARTn_THR: Tx Holding Register,数据先写入该寄存器 ...

  10. Linux命令行操作串口收发数据(stty命令)

    一.设置串口参数(stty) stty命令man手册:https://man7.org/linux/man-pages/man1/stty.1.html. stty命令作用:change and pr ...

最新文章

  1. 人机协同作战:或改写未来战争规则
  2. mysql的status状态说明
  3. em在聊天中是什么意思_聊天时,女人总给你发哦、嗯什么意思?这才是高情商的做法...
  4. DelphiXe5中的双向绑定
  5. 「影视+社交」,网易云信助力「微光」开辟新赛道
  6. java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)
  7. 全国计算机等级考试题库二级C操作题100套(第59套)
  8. “油猴”的五大神级脚本
  9. 小卡机器人积木教程_一盒56种玩法!这套智能积木机器人秒杀家中99%的益智玩具!| 新年礼物...
  10. 正交实验法,软件测试用例的特性,编写方法,软件缺陷的基础知识
  11. 搜狗输入法关闭快捷键
  12. html鼠标滚轴后下一页,鼠标滚动有一页ppt不能马上下翻,而是上下移动,移动到一定位置后才翻到下一页,这是怎么回事?怎么解决?...
  13. 阿里巴巴与山东省人民政府签署战略合作协议
  14. sql触发器Tigger
  15. MacOS 磁盘管理工具 diskutil 介绍
  16. Python1.语言基本要素上(郭炜老师python大学mooc)
  17. python中的运算表达式规则
  18. 绿盟科技c语言笔试,绿盟科技全国统一笔试题
  19. 计算机网络——云计算
  20. 用python画竹子_竹蜻蜓Basic简易入门

热门文章

  1. 一个迅速崛起的国产开源OCR项目!
  2. 【第52期】游戏策划:应聘的误区你信了几个?
  3. jodconverter 远程配置_jodconverter支持什么格式转换
  4. TBS 腾讯浏览服务(X5WebView) 集成指南
  5. 概率图模型之贝叶斯网络的理解与应用
  6. pyhive ModuleNotFoundError: No module named ‘thrift‘
  7. python下载docx模块_怎么下载python-docx模块
  8. 如何在Word中打印奖状?按下这个键,就可以批量制作、打印奖状
  9. 【你好,windows】windows 7 X86X64 旗舰纯净版2020.3.18
  10. 凯撒/摩斯/栅栏/维吉尼亚/元音密码加解密的Python实现