Basic RF 由 TI 公司提供,它包含了 IEEE 802.15.4 标准的数据包的收发。这个协议只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与 802.15.4 MAC兼容的数据包结构及 ACK 包结构,其功能限制如下:
1)、不提供“多跳”、“设备扫描”及 Beacon。
2)、不提供不同种的网络设备,如协调器、路由器等。所有节点同级,只实现点对点传输。
3)、传输时会等待信道空闲,但不按 802.15.4 CSMA-CA 要求进行两次 CCA 检测。
4)、不重传数据。
简言之,Basic RF 功能较为简单,但可用来进行无线设备数据传输的入门学习。
#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 "basic_rf.h" #include "hal_board.h" #define RF_CHANNEL 25 // 2.4 GHz RF channel // BasicRF address definitions #define PAN_ID 0x2007 #define SWITCH_ADDR 0x2520 #define BUZZER_ADDR 0xBEEF #define APP_PAYLOAD_LENGTH 1 #define BUZZER_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 uint8 pTxData[APP_PAYLOAD_LENGTH]; static uint8 pRxData[APP_PAYLOAD_LENGTH]; static basicRfCfg_t basicRfConfig; static void appBuzzer(); static void appSwitch(); static void appBuzzer() { uint8 temp=0; // Initialize BasicRF basicRfConfig.myAddr = BUZZER_ADDR; if(basicRfInit(&basicRfConfig)==FAILED) { HAL_ASSERT(FALSE); } basicRfReceiveOn(); // Main loop while (TRUE) { while(!basicRfPacketIsReady()); if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) { if(pRxData[0] == BUZZER_TOGGLE_CMD) { MCU_IO_OUTPUT(HAL_BOARD_IO_BUZZER_1_PORT, HAL_BOARD_IO_BUZZER_1_PIN, ++temp%2); } } } } static void appSwitch() { pTxData[0] = BUZZER_TOGGLE_CMD; // Initialize BasicRF basicRfConfig.myAddr = SWITCH_ADDR; if(basicRfInit(&basicRfConfig)==FAILED) { HAL_ASSERT(FALSE); } // Keep Receiver off when not needed to save power basicRfReceiveOff(); // Main loop while (TRUE) { if(halButtonPushed()==HAL_BUTTON_1){ //basicRf发送数据包函数(目标短地址,用户数据缓存,缓存长度) basicRfSendPacket(BUZZER_ADDR, pTxData, APP_PAYLOAD_LENGTH); // Put MCU to sleep. It will wake up on joystick interrupt halIntOff(); halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global // interrupt enable halIntOn(); } } } void main(void) { // Config basicRF basicRfConfig.panId = PAN_ID; basicRfConfig.channel = RF_CHANNEL; basicRfConfig.ackRequest = TRUE; // Initalise board peripherals halBoardInit(); if(halRfInit()==FAILED) { HAL_ASSERT(FALSE); } //注:函数appSwitch()和appLight()只能打开一个 //作为开关的节点打开此函数(appSwitch) appSwitch(); //蜂鸣器的节点打开此函数(appBuzzer) //appBuzzer(); } |