CC2530BasicRF的点对点通信

1.搭建开发环境

首先下载IAR软件,需要破译,就不细说了。

推荐使用德州仪器官方的包,最原始。

软件包下载直达:SWRC135 Code example or demo | TI.comView the TI SWRC135 Code example or demo downloads, description, features and supporting documentation and start designing.icon-default.png?t=N7T8http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=swrc135&fileType=zip

 解压完之后是三个文件夹:

直接双击ide文件夹,再双击cc2530_sw_examples.eww。 

 

遇到问题不要怕,一直选择是。 

因为版本问题需要修改以下地方:

编译一下无报错,无警告,开发环境搭建完成。

2.A板按键控制B板LED灯状态

实验器材:两块zigbee开发板(我用的是国赛黑板),两个充电器,一根CCDebug下载器。

打开light_switch - srf05_cc2530中的application文件夹,打开light_switch.c文件夹注释掉以下不用的代码:/* LOCAL VARIABLES*/以下全部注释掉。

A板代码:

#include <hal_lcd.h>
#include <hal_led.h>
#include <hal_joystick.h>
#include <hal_assert.h>
#include <hal_board.h>
#include <hal_int.h>
#include "hal_mcu.h"
#include "hal_button.h"
#include "hal_rf.h"
#include "util_lcd.h"
#include "basic_rf.h"


/***********************************************************************************
* CONSTANTS
*/
// Application parameters
#define RF_CHANNEL                20      // 2.4 GHz RF channel

// BasicRF address definitions
#define PAN_ID                0x1234
#define SWITCH_ADDR           0x000A
#define LIGHT_ADDR            0x000B
#define APP_PAYLOAD_LENGTH        1
#define LIGHT_TOGGLE_CMD          0

// Application states
#define IDLE                      0
#define SEND_CMD                  1

// Application role
#define NONE                      0
#define SWITCH                    1
#define LIGHT                     2
#define APP_MODES                 2

static basicRfCfg_t basicRfConfig;
//无线初始化
void ConfigRf_Init(void)
{
   basicRfConfig.panId      =    PAN_ID;
   basicRfConfig.channel    =    RF_CHANNEL;
   basicRfConfig.myAddr     =    SWITCH_ADDR;
   basicRfConfig.ackRequest =    TRUE;
   while(basicRfInit(&basicRfConfig) == FAILED);
   basicRfReceiveOn();

}
#define SW1 P1_2
#define D4 P1_1

unsigned char send_cmd  = 0xA1;
unsigned char receive_cmd  = 0;

void Init_Port()
{
  //LED
  P1SEL &= ~0x02;
  P1DIR |= 0x02;
  //SW1
  P1SEL &= ~0x04;
  P1DIR &= ~0x04;
  P1INP &= ~0x04;
  P2INP &= ~0x40;
}

void delay(unsigned int i)
{
  unsigned int j,k;
  for(j=0;j<i;j++)
  {
    for(k=0;k<500;k++);
  }
}

void scan_keys()
{
  if(SW1 == 0)
  {
    delay(2);
    if(SW1 == 0)
    {
       basicRfSendPacket(LIGHT_ADDR,&send_cmd,1);
       while(SW1 == 0);
    }
  }
}
/************************MAIN************************/
void main()
{
  halBoardInit();
  ConfigRf_Init();
  Init_Port();
  while(1)
  {
    scan_keys();
    if(basicRfPacketIsReady() == TRUE)
    {
      basicRfReceive(&receive_cmd, 1, NULL);
      if(receive_cmd == 0xA1)
      {
        D4 = ~D4;
      }
    }
  }
}

B板代码:

#include <hal_lcd.h>
#include <hal_led.h>
#include <hal_joystick.h>
#include <hal_assert.h>
#include <hal_board.h>
#include <hal_int.h>
#include "hal_mcu.h"
#include "hal_button.h"
#include "hal_rf.h"
#include "util_lcd.h"
#include "basic_rf.h"


/***********************************************************************************
* CONSTANTS
*/
// Application parameters
#define RF_CHANNEL                20      // 2.4 GHz RF channel

// BasicRF address definitions
#define PAN_ID                0x1234
#define SWITCH_ADDR           0x000B
#define LIGHT_ADDR            0x000A
#define APP_PAYLOAD_LENGTH        1
#define LIGHT_TOGGLE_CMD          0

// Application states
#define IDLE                      0
#define SEND_CMD                  1

// Application role
#define NONE                      0
#define SWITCH                    1
#define LIGHT                     2
#define APP_MODES                 2

static basicRfCfg_t basicRfConfig;
//无线初始化
void ConfigRf_Init(void)
{
   basicRfConfig.panId      =    PAN_ID;
   basicRfConfig.channel    =    RF_CHANNEL;
   basicRfConfig.myAddr     =    SWITCH_ADDR;
   basicRfConfig.ackRequest =    TRUE;
   while(basicRfInit(&basicRfConfig) == FAILED);
   basicRfReceiveOn();

}
#define SW1 P1_2
#define D4 P1_1

unsigned char send_cmd  = 0xA1;
unsigned char receive_cmd  = 0;

void Init_Port()
{
  //LED
  P1SEL &= ~0x02;
  P1DIR |= 0x02;
  //SW1
  P1SEL &= ~0x04;
  P1DIR &= ~0x04;
  P1INP &= ~0x04;
  P2INP &= ~0x40;
}

void delay(unsigned int i)
{
  unsigned int j,k;
  for(j=0;j<i;j++)
  {
    for(k=0;k<500;k++);
  }
}

void scan_keys()
{
  if(SW1 == 0)
  {
    delay(2);
    if(SW1 == 0)
    {
       basicRfSendPacket(LIGHT_ADDR,&send_cmd,1);
       while(SW1 == 0);
    }
  }
}
/************************MAIN************************/
void main()
{
  halBoardInit();
  ConfigRf_Init();
  Init_Port();
  while(1)
  {
    scan_keys();
    if(basicRfPacketIsReady() == TRUE)
    {
      basicRfReceive(&receive_cmd, 1, NULL);
      if(receive_cmd == 0xA1)
      {
        D4 = ~D4;
      }
    }
  }
}

 2.代码分析:

相当于只改了信道号、PAN_ID、本机地址、目标地址,定义了发送和接收的变量,代码自由发挥,主函数里初始化无线射频函数,循环里先判断后写写接收。

1.设置: 1.RF_CHANNEL(信道号)    2.PAN_ID     3.SWITCH_ADDR(本机地址) 4.LIGHT_ADDR(目标地址)

2.无线初始化:

初始化PAN_ID   RF_CHANNEL  SWITCH_ADDR    basicRfConfig.ackRequest表示发送方希望接收方在成功接收到数据后发送一个确认信号。这有助于确保数据的可靠传输

while(basicRfInit(&basicRfConfig) == FAILED); 循环会不断调用basicRfInit函数,直到它返回的不是FAILED(即初始化成功)

basicRfReceiveOn() ;启动或打开射频(RF)模块的接收功能

3.按键扫描函数

basicRfSendPacket(LIGHT_ADDR,&send_cmd,1);如果按键SW1按下,则发送数据

while(SW1 == 0);松手检测,保证按下一次只发送一个数据

4.main函数

如果接收数据正确,D4灯翻转。

if(basicRfPacketIsReady() == TRUE)

    {

      basicRfReceive(&receive_cmd, 1, NULL);

      if(receive_cmd == 0xA1)

      {

        D4 = ~D4;

      }

    }

效果:

以上是一个简单的通信示例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值