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中

 

转载于:https://www.cnblogs.com/zq-Embedded-System/p/5669178.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值