厂家提供的例程,OnMaster OnSlave 结构完全一样。
void OnMaster( void )
{
uint8_t i;
switch( Radio->Process( ) )
{
case RF_RX_TIMEOUT:
……
break;
case RF_RX_DONE:
…
break;
case RF_TX_DONE:
…
break;
default:
break;
}
}
void OnSlave( void )
{
uint8_t i;
switch( Radio->Process( ) )
{
case RF_RX_DONE:
….
break;
case RF_TX_DONE:
…
break;
default:
break;
}
}
很奇怪,所提供的函数里只有启动接收 Radio->StartRx( ),没有启动发射。硬件里收发不能同时进行,也就是说芯片工作在半双工状态。
如果要发送,直接随时Radio->SetTxPacket( Buffer, BufferSize )如果要检测是否收到数据,只要检查Radio->Process( )的状态,如果为
RF_RX_DONE:时,使用
Radio->GetRxPacket( Buffer, ( uint16_t* )&BufferSize
);就可以获得数据。 在例子程序中有三个主要的状态可以使用
RF_RX_TIMEOUT
RF_RX_DONE:
RF_TX_DONE:
顾名思义,分别在接收超时,接收到,发送完下分别做一些处理。
比如说,如果需要做一个应答式的收发控制。
初始化完成后。运行Radio->StartRx( );让设备处于接收状态。
对于控制方,发出命令后,在RF_TX_DONE 里面启动接收。在RF_RX_TIMEOUT 下面重新发送命令,并计数命令重复发送的次数。
在RF_RX_DONE里面获取收到的数据,并判断是否正确。
对于受控一方,在RF_RX_DONE里面获取数据,判断是否符合要求。如果符合要求,发出应答数据。在RF_TX_DONE 里启动接收。
OnMaster( ) OnSlave( )
需要重复运行。实现应答。对于一对多的收发控制也可以采用类似的程序结构。
对于其它功能,可以灵活使用这些状态,关键是要搞清楚,出现这些状态时,应该如果操作。
作者: southcreek, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-408807.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论