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

2023-05-16

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

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


目录

一、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 routine
  afInit();
#endif

  // 初始化操作系统
  osal_init_system();

  // 使能全部中断
  osal_int_enable( INTS_ALL );

  // 最终板载初始化
  InitBoard( OB_READY );

  // 显示设备信息
  zmain_dev_info();

  /* Display the device info on the LCD */
#ifdef LCD_SUPPORTED
  zmain_lcd_init(); //初始化LCD
#endif

#ifdef WDT_IN_PM1
  /* If WDT is used, this is a good place to enable it. */
  WatchDogEnable( WDTIMX );
#endif

  osal_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;
#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

}

对了还得提起一个知识点 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上用串口功能用的比较多,这是第一次用协议栈实现

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 【总线】一文看懂RS232和RS485通信总线

    目录 RS232概述 RS232特性 RS485 概述 RS485 特性 RS232 和 RS485 的区别 区别总结 RS232概述 RS 232接口符合电子工业联盟 xff08 EIA xff09 建立的串行数据通信接口标准 原始编号是
  • 【C++学习笔记】vector构造函数

    文章目录 1 vector构造函数说明 xff1a 2 实战 xff1a 2 1 vector构造函数代码示例2 2 输出 3 参考资料 1 vector构造函数说明 xff1a span class token keyword templ
  • 请求报文/相应报文

    一 请求报文分为4个部分 请求行 请求头 请求空行 请求体 1 1 请求行 主要是3个部分 GET 请求方式 1 2 请求地址 所带的参数 demo demo php userName 61 E6 9D 8E E5 9B 9B amp us
  • python+requests——高级用法——auth认证

  • C语言char指针的使用

    在c语言中 xff0c char指针不仅能指向char变量 xff0c 还能指向常量字符串 xff0c 同时也能指向一个char数组的 想要访问单个字符 xff0c 就要通过 来进行解引用 xff0c 若是要访问整个数组或字符串的话 xff
  • HTTP协议的请求格式解析

    HTTP协议是一个使用较多的应用层协议 xff0c 它是一个请求 响应式的一个协议 xff0c 就是我客户端给你发一个请求 xff0c 你客户端需要返回给我一样响应 首先我们来看一下HTTP协议的请求格式 HTTP请求格式 xff1a HT
  • 运行Gazebo+moveit+Rviz,报错,提示无控制器

    在rviz里规划成功后 xff0c 执行显示failed rviz里能规划 xff0c 但是Gazebo里动不了 moveit报错如下 xff1a WARN 1679466487 132361192 26 763000000 Waiting
  • 基于UDP协议搭建的简单客户端与服务器(UDP协议)

    UDP协议 UDP协议的介绍1 UDP的缺点 基于UDP实现的回显服务器基于UDP实现的客户端 UDP协议的介绍 UDP协议特点 xff1a 1 无连接 2 面向数据报 3 不可靠传输 4 全双工 16位源端口号 目的端口号 xff1a 表
  • C++之AStar寻路算法

    仅以记录 有一种算法 名为AStar 它的作用是求图中两点之间的最短路径 沉迷 该算法的我 自己编写了一个版本 注释虽少 但求传神 代码虽 恶心 但求理解 include lt iostream gt include lt vector g
  • 使用livox_viewer2对激光雷达livox_mid360进行调试

    准备 系统 windows10 硬件 xff1a livox mid360 软件 xff1a livox viewer2 测试 连接号激光雷达设备 xff0c 电脑ip相关设置和livox avia一样 livox系列激光雷达ip设置都是一
  • 听说你还不会制作“GIF动图”,手把手包教会,这不就来了吗

    近期 xff0c 看了好多写的博客 xff0c xff08 不管是前端HTML的还是后端Java的 xff0c 前端制作的3D部分的效果图需要展示动图 xff09 发现有点还存在想使用动图 xff0c 但是不会制作 xff0c 又或者是制作
  • HTML+js实现贪吃蛇小游戏(内含完整代码)

    案例分析 看图拆解游戏 首先我们根据图片上的内容把这个游戏拆解成几个部分去单独看 xff1a 最外面的大盒子包裹着内容加边框限制蛇的活动范围 xff0c 整个范围可以看成由许多小方格排列构成的 xff0c 例如这样子的 xff1a xff1
  • 【华为Hilink SDK Linux系统开发】第三章:华为hilink SDK Linux系统网关适配

    mark xff1a https blog csdn net qq 24550925 article details 107282773 关注嘉友创科技公众号 声明 xff1a 文章只做技术交流 xff0c 没有其他任何用途 xff0c 侵
  • 快速去除GIF动图的背景(让背景变透明),保姆级教程

    很多小伙伴在看到好看的动图效果时 xff0c 想用在自己的页面上 xff0c 可是常常会碰到一些动图背景颜色不符合自己的需求 xff0c 所以会产生修改动图背景的想法 xff0c 但是GIF动图终究是GIF动图 xff0c 不像静态图片那样
  • Vue在HTML中如何使用

    x1f440 Vue是什么 一套用于构建用户界面的渐进式JavaScript框架 构建用户界面 xff1a 数据变成界面渐进式 xff1a Vue可以自底向上逐层的应用 x1f440 Vue如何使用 一 引入vue js lt script
  • 简单记录一下怎么看package.json文件

    首先每个vue工程文件从仓库克隆代码下来的时候 xff0c 一般都会包含这个文件 xff0c 这个文件非常重要 xff0c package json包含了关于项目重要信息 xff0c 如下图所示 其中包含了name version desc
  • 项目中常用到的前端vue根据后端接口返回文件地址实现在线预览和下载功能

    简简单单的记录一下项目中做过的东西 项目中时常会有要求查看附件 xff0c 附件的下载的要求 xff0c 在这里简单记录一下前端vue根据后端接口返回文件地址实现在线预览和下载功能 x1f440 文件在线预览 目前我这里使用的是点击a链接跳
  • 记录面试问题

    以下问题不分先后 xff0c 按照印象深浅排序 xff0c 可能一次记录不完成 xff0c 后面想起来会及时补充 xff0c 如有不对 xff0c 恳请各位围观大佬多多指教 x1f64f 印象最深的是一道很简单很简单的题目 xff0c 我结
  • C++中“.“,“->“,“:“和“::“的区别

    在 C 43 43 中 xff0c 34 34 xff0c 34 gt 34 xff0c 34 34 和 34 34 都是运算符 xff0c 它们的作用是明显不同的 xff0c 但是初学者很容易被其迷惑 1 34 34 是成员访问运算符 x
  • ubuntu系统中忘记root密码的解决办法

    1 启动ubuntu按shift进入grub菜单 xff1b 2 选择recovery mode进入Recovery Menu界面 xff0c 选择root Drop to root shell prompt 3 修改root密码操作 xf

随机推荐

  • C++语言实现哈希表中的线性探测法和平方探测法

    哈希表 xff08 Hash表 xff09 xff0c 也称为散列表 xff0c 是一种数据结构 xff0c 通过使用哈希函数将键映射到数组的特定位置来实现高效的查找 插入和删除操作 哈希函数将键转换为一个整数 xff0c 这个整数对应数组
  • C++实现的二叉树前序遍历函数

    include lt iostream gt using namespace std struct TreeNode int val TreeNode left TreeNode right TreeNode int x val x lef
  • c语言和c++实现层序遍历

    层序遍历是一种二叉树的遍历方式 xff0c 也称为广度优先遍历 xff0c 它的遍历顺序是 xff1a 从上到下 xff0c 从左到右 xff0c 一层一层地遍历整棵树 在 C 语言中 xff0c 我们可以使用队列来实现层序遍历 具体实现步
  • C语言获取wifi状态

    mark https blog csdn net dongyoubin article details 122134198 int getWirelessStatus char ath char ssid char ipAddr
  • 最全Visual Studio版本号对应表VisualStudioVersion

    名字 版本号 简称 全称 msvc70 VC7 0 VS2002 Microsoft Visual Studio 2002 msvc71 VC7 1 VS2003 Microsoft Visual Studio 2003 msvc80 VC
  • 二叉树静态实现的示例代码

    使用指针对于初学者容易出现很多困惑 下面是一个完整的二叉树静态实现的示例代码 xff0c 包括初始化 插入节点 各种遍历方法以及一些辅助函数 include lt stdio h gt include lt stdlib h gt defi
  • 广度优先搜索(BFS)算法实现二叉树层序遍历的 C++ 代码

    include lt iostream gt 输入输出流 include lt vector gt 向量容器 include lt queue gt 队列容器 using namespace std 命名空间 定义二叉树节点结构体 stru
  • PAT 1005 Spell It Right

    Given a non negative integer N your task is to compute the sum of all the digits of N and output every digit of the sum
  • 在PC的Ubuntu虚拟机上完成一个TCP 服务器,在设备上实现一个TCP客户端

    要求 在虚拟机上实现一个服务器 xff0c 设备终端上实现一个客户端设备客户端每隔 1 秒 检测一次网卡eth2 1 xff08 WAN口网卡 xff09 的信息 xff08 使用popen调用ifconfig xff09 然后将RX和TX
  • TCP发送数据、接受数据及TCP通信程序练习

    目录 一 TCP发送数据 二 TCP接收数据 三 TCP通信程序练习 一 TCP发送数据 Java中的TCP通信 xff1a Java对于基于TCP协议的网络提供了良好的封装 xff0c 使用Socket对象来代表两端的通信端口 xff0c
  • slam学习笔记

    ubuntu20 04 使用vs code编写 现放cmake文件 xff08 记得链接库文件和配置C 43 43 版本 xff09 cmake minimum required VERSION 2 8 project learingMat
  • SLAM学习笔记

    编译环境ubuntu20 04 vs code xff08 李群 李代数 xff09 先是CMakeLists txt cmake minimum required VERSION 3 0 project learning sophus s
  • SLAM学习笔记

    编译环境ubuntu20 04 xff0c vs code 先cmake文件 cmake minimum required VERSION 2 8 project image set CMAKE BUILD TYPE 34 Release
  • SLAM学习笔记

    编译环境ubuntu20 04 vscode ceres库2 0 0 g2o库同gaoxiang12 slambook2中的版本号一致 cmake文件 cmake minimum required VERSION 2 8 project c
  • 数据结构之C语言单链表操作

    实验目的 xff1a 1 xff0e 创建一个带头结点的单链表 2 xff0e 插入元素操作 xff1a 将新元素x插入到单链表head的头部 将新元素x插入到单链表head的尾部 将新元素x插入到单链表head中第i个元素之后 3 xff
  • DBUS入门与C编程

    https blog csdn net weixin 45566765 article details 125028296 一 D Bus简介 1 D Bus是什么 D Bus最主要的用途是在 Linux 桌面环境为进程提供通信 xff0c
  • 模拟IIC——关于模拟IIC的IO口的配置选取推挽输出还是开漏输出,以及是否需要更改IO口输入输出模式和是否需要对IO配置上拉

    在使用模拟IIC的时候 xff0c 观看别人的程序的时候发现了程序之间的一些不一样的地方 代码1 IO方向设置 define SDA IN GPIOB gt MODER amp 61 3 lt lt 9 2 GPIOB gt MODER 6
  • C语言——链表

    C语言 链表 链表是一种基础的数据结构类型 xff0c 一种能够动态维护数据的线性数据表 链表的数据以结点形式存储信息 xff0c 并通过结点之间的指针实现结点之间的衔接 为什么要用链表 xff1f 链表和数组类似 xff0c 但是功能比数
  • 学习记录 | ZigBee协议栈工作流程

    第一次来CSDN记录一下学习过程 xff0c 其实就是笔记啦 之前用Typora 的 但前几天电脑出问题重装系统后打开笔记文件发现照片都打不开了 xff0c 索性想换一种记笔记方式 好啦 以下是正文 xff01 xff01 xff01 对了
  • 学习记录 | ZigBee协议栈实践——串口收发数据

    上次的理论知识学的有点杂乱 今天来跟着例程实践看一看 目录 一 ZigBee协议栈的安装 编译和下载 二 协议栈工作流程 三 串口通信主要代码 1 串口打印 2 串口打印收到的数据 四 实现 五 总结 一 ZigBee协议栈的安装 编译和下