2013.6.9学习radio接收配置
接收所有在信道上的数据(可以用来做监视器?)
ST_RadioEnableAddressFiltering(FALSE);//关闭地址过滤
ST_RadioEnableAutoAck(FALSE); //关闭自动确认机制
根据自己的需要可以设置这两项
如果设置了地址过滤,则需要设置PAN ID和节点ID
uint16_t panid = USER_PAN_ID;
/* 设置PAN ID */
ST_RadioSetPanId(panid);
uint16_t nodeid = USER_NODE_ID;
/*设置节点短地址*/
ST_RadioSetNodeId(nodeid);
transmit.c文件中的boolean ST_RadioDataPendingShortIdIsrCallback(uint16_t shortId)和boolean ST_RadioDataPendingLongIdIsrCallback(uint8_t* longId)用于检测该长短地址是否还有未完的数据需要等待发送的,不过在transmit.c对长地址检测的函数描述This application does not use long IDs with indirect transmissions.好像是说这个函数不能直接使用长地址返回数据,其返回值也是FALSE。
现在看回来transmit.c是ST为例程所写的,相当于main函数的另一部分,不是标准库里面的函数,可以按照自己的需求,对其改写
transmit.c只是发送函数的配置,没有配置任何接收函数,所以在main.c中加入了接收函数的配置
void ST_RadioReceiveIsrCallback(uint8_t *packet,boolean ackFramePendingSet,uint32_t time,uint16_t errors,int8_t rssi)
{
/* 在终端中运行*/
uint8_t i;
/* 复制buffer */
if(packetReceived == FALSE)
{
for(i=0; i<=packet[0]; i++)
{
rxPacket = packet;
}
packetReceived = TRUE;
}
}
不过现在还不清楚中断中需要如何配置,好像都书本和pdf都没有说到中断的处理,再留意一下
在main函数中循环检测是否有接收到数据,接收到就打印出来
if(packetReceived == TRUE)
{
for(i=0; i<=rxPacket[0]; i++) {printf(rxPacket);}
/* 处理完毕,释放标志*/
packetReceived = FALSE;
}
345002072_353389109 2013-6-10 16:31
新博主哦,支持一下,加油!!