Zstack 串口通信

目标:实现PC与CC2530的串口通信,选择P0-2,P0-3

功能:PC发送任意字符串给单片机,单片机再把数据返回给PC电脑

首先说下执行流程:  1.打开zmain函数,这是整个zstack执行的主函数
                           2. 定位到  osal_init_system();这个函数是系统初始化函数(zstack嵌入了osal操作系统)
                           3.go to define of   osal_init_system;及打开osal.c文件,找到 osalInitTasks();(任务初始化函数)开始执行任务了,
注册任务:
const pTaskEventHandlerFn tasksArr[] = {
  macEventLoop,//MAC任务循环
  nwk_event_loop,//网络层任务函数
  Hal_ProcessEvent,//硬件层函数
#if defined( MT_TASK )
  MT_ProcessEvent,//串口支持层定义
#endif
  APS_event_loop,//应用支持层任务事件函数
#if defined ( ZIGBEE_FRAGMENTATION )
  APSF_ProcessEvent,
#endif
  ZDApp_event_loop,//设备对象层函数
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
  ZDNwkMgr_event_loop,
#endif
  GenericApp_ProcessEvent//自己定义的任务处理函数
};

初始化任务:
void osalInitTasks( void )//为各个进程添加任务ID,用作查找任务时用
{
  uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
  osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

macTaskInit( taskID++ );//MAC层的任务ID号
  nwk_init( taskID++ );//网络ID分配
  Hal_Init( taskID++ );//硬件ID分配
#if defined( MT_TASK )
  MT_TaskInit( taskID++ );
#endif
  APS_Init( taskID++ );
#if defined ( ZIGBEE_FRAGMENTATION )
  APSF_Init( taskID++ );
#endif
  ZDApp_Init( taskID++ );
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
  ZDNwkMgr_Init( taskID++ );
#endif
  GenericApp_Init( taskID );//为自己的任务添加ID
}

红颜色的字,是我们需要添加的
4.新建coordinator.c(协调器)
端口注册,初始化,任务注册,任务初始化,串口初始化
  uartConfig.configured           = TRUE;              // 2x30 don‘t care - see uart driver.
  uartConfig.baudRate             = HAL_UART_BR_115200;
  uartConfig.flowControl          = FALSE;
  uartConfig.flowControlThreshold = 64; // 2x30 don‘t care - see uart driver.
  uartConfig.rx.maxBufSize        = 128;  // 2x30 don‘t care - see uart driver.
  uartConfig.tx.maxBufSize        = 128;  // 2x30 don‘t care - see uart driver.
  uartConfig.idleTimeout          = 6;   // 2x30 don‘t care - see uart driver.
  uartConfig.intEnable            = TRUE;              // 2x30 don‘t care - see uart driver.
  uartConfig.callBackFunc         = rxCB;(串口回执函数)
  HalUARTOpen (0, &uartConfig);
static void rxCB(uint8 port,uint8 event)
{  
unsigned  char Uartbuf[10];
unsigned char len;
len=HalUARTRead(0,Uartbuf,10);
if(len)
{
    HalUARTWrite(0,Uartbuf,len);
    len=0;
}
}

5.实现串口发送:
通过HalUARTRead读取pc机发送的数据,然后放到Uartbuf中
通过HalUARTRead发送数据给PC机
6.编译下载程序到CC2530中

时间: 2024-11-05 16:30:29

Zstack 串口通信的相关文章

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中,  但系统只推荐使用DMA方式, 可以通过修改宏定义来改为ISR的方式,宏定义在hal_board_cfg.h中. Z-Sta

ZStack串口通信

要使用ZStack就不得不先了解ZStack的OSAL工作原理 http://blog.csdn.net/qinpeng_zbdx/article/details/20990797 http://wenku.baidu.com/link?url=OILW1kTqP0nnNnLmuiCa9v... 了解事情的本质后,操作就很简单了 根据这篇博客可以很清楚的了解如何在ZStack下使用CC2530开发板进行串口通信 http://home.eeworld.com.cn/my/space-uid-53

【转】转载 zstack 串口使用指南

Z-STACK问题之串口结构uartCfg_t乱说 typedef struct { uint8 *rxBuf;//接收缓存 uint8 rxHead;//头 uint8 rxTail;//尾 uint8 rxMax;//接收最大长度 uint8 rxCnt;//计数 uint8 rxTick;//时间 uint8 rxHigh;//高位 uint8 *txBuf; #if HAL_UART_BIG_TX_BUF uint16 txHead; uint16 txTail; uint16 txMa

51单片机之串口通信(三)

51单片机之串口通信(三) 已有 47 次阅读2015-12-29 00:21 |个人分类:51单片机| 单片机, 通信 用串口实现发送和接收同时可操作: 电脑显示结果如图: 源程序: /*项目名称:串口发送接收实验项目内容:串口发送接收同时进行,计算机发送数据给单片机控制P0口,从而控制LED灯的亮灭,单片机发送数据到计算机,计算机显示出来时间:2015年12月23日项目负责人:YUAN*/#include <reg52.h>typedef unsigned char uChar8;type

(转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信

此文章以visual C++数据採集与串口通信測控应用实战为參考教程 此文章适合VC++串口通信入门 一.页面布局及加入控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目comm 注意:点击ok,然后next,这时候要将application type改成dialog base.接着next到最后一个对话框是将generated dasses改成CcommDlg,然后finish 4, 将新生成的项目的对话框默认dialog edit删去,如图 5,在对话框中加入两个st

嵌入式Linux裸机开发(七)——UART串口通信

嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER, 它用来传输串行数据.发送数据时, CPU 将并行数据写入UART,UAR按照一定的格式在一根电线上串 行发出:接收数据时, UART检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210中, UART提供了 4 对独立的异步串口I/O端口,

51单片机之串口通信(一)

一.基础知识 1.串行通信和并行通信:目前用的比较多的是串行通信.串行通信优点是连接简单,传输距离远:缺点是传输速度慢. 2.串行通信:分为同步通信和异步通信:异步通信是指发送和接收设备利用各自的时钟控制数据的发送和接收. 3.串行通信的传输方向:单工,半双工,全双工. 4.波特率:每秒钟传输2进制代码的位数,如1个字节为10位,每秒传输240个字节,则波特率为10*240=2400bps,单位是bps: 5.RS-232C:25个管脚,我们用到的是PGND(保护接地).TXD(发送数据),RX

转:Qt编写串口通信程序全程图文讲解

转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动.) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qextser

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方