Z-stack 串口的使用

手把手学习Zigbee - 使用Z-Stack 3.0.2配置CC2530的两个串口 文章目录前言设备介绍串口选择解析和配置 Z-Stack总结 前言 EFR32那个平台好用是好用,但是网上能找的资料太少了,玩不明白,至今没有弄清楚那个平台的触发回调函数的流程 还是回头用CC2530吧,虽然没EFR32这么先进,但是更加符合我的开发习惯和逻辑,配合 Z-Stack 也比较方便。 设备介绍 CC2530 挺常见的zigbee 开发板,网上教程很多但 Z-Stack 的不是很全,而且开发板型号可能有细微差异,我这次就被坑了。 串口选择 因为串口0作为调试串口,和传感器通讯就必须要使用额外的串 阅读详情

1、定义一个串口初始化函数,函数里面对串口进行配置

void initUart(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;

uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_38400;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = RX_BUF_LEN;
uartConfig.tx.maxBufSize = 128;

uartConfig.idleTimeout = 6; 
uartConfig.intEnable = TRUE; 
uartConfig.callBackFunc = pf;

HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}

 

2、在 ZB_ENTRY_EVENT 这个事件的处理函数中,调用initUart();参数uartRxCB是串口的回调函数。

if( event & ZB_ENTRY_EVENT )
{ 
……

……
if ( appState == APP_INIT )
{ 
 logicalType = ZG_DEVICETYPE_COORDINATOR;
zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);
initUart(uartRxCB); 
}

 

3、定义回调函数,用以接收串口数据

void uartRxCB( uint8 port, uint8 event )
{
uint8 pBuf[RX_BUF_LEN];
uint16 cmd;
uint16 len;
uint16 Endivce_addr;

if ( event != HAL_UART_TX_EMPTY ) 
{
len = HalUARTRead(HAL_UART_PORT_0, pBuf, RX_BUF_LEN) ;//HalUARTRead把接收到的数据存储到pBuf数组里。

if ( len>0 ) 
{
cmd = BUILD_UINT16(pBuf[SYS_PING_CMD_OFFSET+ 1], pBuf[SYS_PING_CMD_OFFSET]);

if( (pBuf[FRAME_SOF_OFFSET] == CPT_SOP) && (cmd == SYS_PING_REQUEST) ) //CPT_SOP=0xFE
{
// sysPingReqRcvd(); 
}
else
{
HalLcdWriteScreen( "Receive Datas","From PC" );
HalLcdWriteValue(pBuf[0],10,3);
HalLcdWriteValue (255, 16, 4);
Endivce_addr = pBuf[1]*256 + pBuf[0];
zb_SendDataRequest( Endivce_addr, LED_PWM_CMD_ID, len, pBuf, 0, 0, 0 );//AF_DEFAULT_RADIUS Endivce_addr
}
}
}
}

 

4、使用HalUARTWrite()函数进行串口数据的发送;

如HalUARTWrite(HAL_UART_PORT_0, pFrame, FRAME_LENTH);

cc2530 z-stack工程串口写     刚成为码农的小菜鸟一枚,最近在学习zigbee的z-stack工程,有了串口会比较方便,目前还有一些地方没搞好,不过至少还是可以写数据到pc查看的,其他等以后在慢慢修改好。     首先要打开串口编译,并关闭LCD编译(这里因为用不到,而且串口打开后内存不够,所以关闭了),把HAL_LCD的TRUE改为FALSE,HAL_UART的FALSE改为TRUE。 编译前需要关闭一些预编译... 阅读详情

相关推荐

【TM1640】STM32 TM1640芯片驱动程序

以下为.h文件: #ifndef __TM1640_H__ #define __TM1640_H__ #include "stm32f10x.h" #define ADDR_START1640 0XC0 #define DSP1640_DIS 0 #define DSP1640_ENB 1 /* 控制显示 ...

cxw312864660的博客 1万+

Z-Statk协调器 路由器 终端的确定---Simple例程(一)

Z-Statk协调器 路由器 终端的确定---Simple例程(一) 2010-12-24 09:42:10 分类: 嵌入式       当我们选择了终端、路由器、或者协调器的时候,来看一下程序中是怎么判断的。也就是如何作为其中的各个角色进行启动,是加入网络,还是形成网络。因为我们在这三个设备上使用的一套代码。首先,我们可以看到下面的三张图,这个是

linuxheik的专栏 1507

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 886

【ZigBee/ZStack快速入门】04-串口

时钟+串口配置

半两八斤的博客 598

计算机组成原理(二)—— 数据的表示与运算

本章目录引言一、数制与编码1.1 进位计数制1.1.1 进制及转换1.1.2 真值、机器数1.2 BCD码1.3 ASCII 码1.4 校验码1.4.1 奇偶校验码1.4.2 海明码1.4.3 CRC循环冗余码二、定点数的表示和运算2.1 定点数的表示2.1.1 无符号2.1.2 有符号(原码、反码、补码、移码)2.2 定点数的运算2.2.1 移位运算2.2.2 加减运算(溢出判断)2.2.3 乘法运算2.2.4 除法运算2.3 强制类型转换2.4 数据的存储和排列三、浮点数的表示和运算3.1 浮点数的表示

S mile0804的博客 7473

火山引擎大模型语音合成双向流式API实战:Python实现与优化指南

本文详细介绍了如何利用火山引擎大模型语音合成双向流式API,通过Python实现低延迟、实时的语音合成应用。文章从核心协议解析入手,提供了完整的Python客户端实现代码,并分享了连接复用、错误重试、与LLM流式输出集成等实战优化技巧,帮助开发者快速构建智能客服、实时语音助手等AI应用。

n8m7b6v5c4的博客 1219

SimpleApp例子中网络的形成过程

SimpleApp例子中网络的形成过程    每个设备都有一组被配置的参数,整个配置参数在代码中已经定义了默认值(在f8wConfig.cfg)中,在同个网络中,所有设备的“网络细节”配置参数(如PANID,Channel等)应该被设置成一样的值。每个设备的“设备细节”配置参数(Coordinator,RouterEndDevice等)可能配置为不同的值。    但是,ZCD_NV_LOGIC

xiaoaide01的专栏 958

超融合架构实战:如何用3节点搭建企业级分布式存储系统?

本文详细介绍了如何利用3节点搭建企业级分布式存储系统的超融合架构实战指南。从硬件选型、网络配置到存储策略调优,提供了全面的实操建议和性能优化技巧,帮助企业实现高效、弹性的IT基础设施。特别适合需要简化运维、提升存储性能的中型企业参考。

weixin_29200485的博客 325

Z-stack回调函数及回调机制

函数本是为调用者准备的美餐,其烹制者应对食客了如指掌,但实情并非如此。例如,写一个快速排序函数供他人调用,其中必包含比较大小。麻烦来了:此时并不知要比较的是何类数据--整数、浮点数、字符串?于是只好为每类数据制作一个不同的排序函数。更通行的办法是在函数参数中列一个回调函数地址,并通知调用者:君需自己准备一个比较函数,其中包含两个指针类参数,函数要比较此二指针所指数据之大小,并由函数返回

学海无涯 1595

手把手教你为STM32设备生成自定义MAC地址(基于芯片ID的5种算法对比)

本文详细介绍了基于STM32芯片ID生成自定义MAC地址的5种算法,包括直接截取、异或折叠、CRC32哈希、自定义混合运算及SHA-256摘要。通过对比分析各算法的计算复杂度、唯一性及适用场景,帮助嵌入式开发者根据项目规模与资源,选择最合适的方案,确保设备MAC地址的唯一性与合规性。

weixin_29170327的博客 527

OpenClaw更新后变傻了?一分钟教你快速恢复(OpenClaw更新版本后降智、缺少权限问题的解决方案)

OpenClaw 版本更新后出现降智问题,AI不再执行具体任务。本文详细分析问题原因,提供最简便的解决方案✅

XiaoqiangClub的博客 3884

ZigBee TI ZStack CC2530 3.18 串口01-发送

(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 这一节,基于《ZigBee CC2530 Z-Stack 06 创建基于Z-Stack的全新工程》一节中创建的全新工程ProjectApp进行进一步实验,实现调用Z-Stack中现成的串口驱动函数实现串口发送功能,具体效果为系统一上电CC2530芯片即通过串口0打印...

weixin_33971205的博客 659

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6108

zigbee z-stack 同时使用两个串口

如何在z-stack中同时使用两个串口,zstack较新的版本支持同时使用两个串行口,不过要求一个是DMA方式另一个是ISR方式。

易海飞雪的专栏 3230

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Z-Stack串口通信使用心得

最近在做一个智能家居的项目,用到了TI的CC2530芯片以及对应的zstack协议栈,其中串口通信部分使用的最多,下面就分享一下Z-Stack对串口封装的使用心得。Z-Stack中对串口操作的封装主要在hal_uart.h,hal_uart.c中, 支持DMA和ISR两种处理方式, 真正的实现则都封装在_hal_uart_dma.c和_hal_uart_isr.c中,但...

weixin_34126557的博客 1040

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Z-STACK在CC2530上同时使用两个串口

定义: 1、同时使用两个串口必须要一个为DMA,一个为ISR 2、我们这里使用串口1(DMA)来和别的设备进行通讯,使用 2(ISR)来和Z-TOOL进行通讯,方便调试 HAL_UART=TRUE ZTOOL_P2 HAL_UART_DMA=1 HAL_UART_ISR = 2 3、和Z-TOOL相关的串口初始化和中断系统已经定义好了,现在只需要定义一下 我们自己使用的串口...

denghuang3263的博客 578

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

cc2530使用Z-Stack配置串口收发数据之参数的配置(1)

这个是自己第一次接触Zigbee无线传输协议 以下是自己对Z-Stack控制cc2530串口的一些笔记 协议栈提供了 串口0的备选引脚1的使用和 串口1 的备选引脚2的使用 用户对协议栈的串口进行操作,TI把很多初始化的工作封装在了MT层 下面为串口的初始化讲解 void MT_UartInit () { halUARTCfg_t uartConfig; /* Initialize APP ID ...

weixin_41637955的博客 2553

ZigBee Z-Stack 3.17 串口00-总

(配套源码、软件、开发板等资源,入口见文末) 一、前言 本博客ZigBee分支关于CC2530的串口部分的介绍,分为如下三篇文章: 1、ZigBee Z-Stack 3.18 串口1-发送(<-点击链接) 2、ZigBee Z-Stack 3.19 串口2-接收(<-点击链接) 3、ZigBee Z-Stack 3.20 串口3-prin...

拿破仑940911 1192

CC2530学习(六)注册Z-stack串口

文章目录一、HAL和MT层二、初始化串口三、登记串口任务号四、发送字符串五、额外的配置 一、HAL和MT层 从下面两幅图幅图我们可以看到Z-stack提供的HAL层里面包含了很多外设的驱动程序,简化了我们开发流程。但是同时我们也发现了项目下面还有一个MT层,它提供的操作比HAL层更加简便和多样(MT层是HAL层的上层)。所以我们就用MT层的函数进行UART的初始化。 二、初始化串口 之前我们提...

oyzy_Sean的篝火 987

zigbee模块_Z-stack的使用

Ztack

青云志的博客 2668

08_Z-Stack中使用ESP8266

​ 本章讲解使用模块,与上位机实现通信。将介绍,并提供一份基于的驱动代码。ESP相关代码在AT.c和AT.h文件中,将其添加到App组下。

nanxl1的博客 1061

z-stack2.5下的浮点数打印

本次,针对于z-stack2.5下的的浮点数的输出及打印的调试,现已成功用串口能够打印出内存中的浮点数,在此记录下来。 首先,需要注意一点。如下图,可以看见默认的设置,z-stack是默认不支持打印有关浮点型类型的数据的。 首先,需将printf formatter中把“Small”改为“Auto”。点击OK,保存。 如下面的代码,需要将采集的float类型的tempe_value,...

Strange_Gu的博客 486

ZStack Monitor and Test(MT)功能简介与Z-tool使用介绍

言归正传,一直有网友对MT功能与Z-tool的应用很关注,但网上相关的资料又非常少,甚至TI的英文文档也没有独立一个文档介绍这一部分。结合自己的经验,想对这一部分进行一个整理。当然也只是抛砖引玉,希望大家以此贴为引子,对这一部分进行一个探讨,为后来者提供一个借鉴。     [注:本文源自www.feibit.com--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行]  

zwwwwc的博客 1115

(1)基于zigbee协议栈开发——串口通信

使用IAR for 8051 V8.1打开TI官方的z-stack协议栈工程。 点击打开工作区APP文件夹内的SampleApp.c文件,现在就开始基于协议栈应用开发吧,其实就是调zigbee协议栈里的库罢了。 3.1 打开之后在程序代码内添加串口编程要用到的头文件,头文件来自哈尔库或者协议栈 3.2 在程序文件中找到SampleAPP_Init函数 3.2.1 在里面调用MT_UartInit()函数和HalUARTWrite()函数 (1)串口初始化函数MT_UartInit()位于..

anmo_moan的博客 2651

Z-Stack中HalUARTWrite的使用以及osal_strlen()的使用

Z-Stack中串口的使用,涉及到一个字符串指针的问题。串口写函数如下 uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len) port 自不必说,HAL_UART_PORT_0或者_1,我想说的是字符串的长度。 首先,我们定义这样一个字符串,如下所示 uint8 *txBuffer = "I am uartCallBac

KylinMountain的笔记 1万+
上一篇: CC2530的ZigBee应用层加入串口
下一篇: 浅谈C中的malloc和free
cucmakeit
博客等级 码龄14年 30粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值