本文基于802.15.4/ZigBee的SimpleMac协议栈编写程序,实现两个STM32W108无线节点之间的通信。节点分为SUN节点和PLANET节点,SUN节点使用STM32W108无线开发板,PLANET节点使用STM32W108无线节点,SUN节点可与PC机进行通信。
程序设计与实现
程序的设计基于SimpleMac协议栈进行,根据官方提供的MAC协议栈示例代码进行的裁剪更改,第10章已对协议栈代码进行了解析,在此就不详细说明,以下只给出部分主要相关代码。
文件solar-system.c部分内容:
部分全局变量定义:
//负载类型 #define PT_LED (0x09) #define PT_TRSEND (0x0A) #define PT_GENERIC_DATA8 (0x0B) #define PT_GENERIC_DATA32 (0x0C)
//数据包类型 #define GENERIC_DATA8_PACKET ((FT_DATA <<4) | (PT_GENERIC_DATA8 <<0)) #define GENERIC_DATA32_PACKET ((FT_DATA <<4) | (PT_GENERIC_DATA32 <<0)) #define LED_PACKET ((FT_DATA <<4) | (PT_LED <<0)) #define TRSEND_PACKET ((FT_DATA <<4) | (PT_TRSEND <<0)) |
函数processRxPacket():
/************************************************************************** 功能描述:对接收的数据包进行解析解码处理,并根据不同类型的数据包执行不同的操作,数据包信息通过数据包回调函数保存在结构体变量rxData中 输入参数:无 输出参数:无 ***************************************************************************/ void processRxPacket(void) { …... //不同的数据包类型,不同的处理 switch(packetType) { case (GENERIC_DATA_PACKET): //普通类型数据包 RX_DETAILS(printf("GENERIC_DATA_PACKET\r\n");) #ifdef SUN_ROLE case (LED_PACKET): //PT_LED数据包 printf("Message from my PLANET\r\n"); halSetLed(LED_D1); //点亮LED halCommonDelayMilliseconds(500);//延时500ms halClearLed(LED_D1); break; #endif case (SUN_SEARCH_PACKET): //处理搜索父节点的数据包 RX_DETAILS(printf("SUN_SEARCH_PACKET\r\n");) for(i=0;i<PLANET_TABLE_SIZE;i++) //扫描子节点数组 { if(!planetTable[i].active) //判断是否有有效空间 |