TX RX例程¶
1 功能概述¶
本代码示例主要演示PAN3029的收发切换,互相通信功能。
2 环境要求¶
Board: PAN3029 开发板
Mini USB线2根,用于给开发板供电和查看串口打印Log
J-Link下载器一个,用于程序下载
将 J1,J4用跳帽连接
4 使用说明¶
根据环境要求一节的介绍,正确连接2套 EVB 开发板的跳线,编译、下载程序:
在电脑上打开串口调试工具,串口参数:115200/8bit/1stop/无校验
观察串口打印的内容,理论上初始化成功后,串口会打印相关信息
需要下载两套开发板程序演示本功能,两套程序代码不需要修改,将两个开发板先后上电,即可实现两个模组互相收发的功能。
串口输出信息(正常通信)如下:
RF Init OK
TXRX MODE
Tx cnt 1
Rx : SNR: 8.629331 ,RSSI: -12
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09
###Rx cnt 1##
Tx cnt 2
Rx : SNR: 8.775733 ,RSSI: -12
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09
###Rx cnt 2##
Tx cnt 3
Rx : SNR: 10.621913 ,RSSI: -12
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09
###Rx cnt 3##
正常通信时,模组初次上电会发送一包数据,然后进入超时接收模式。接收到数据后,延时,再次发送一包数据。
串口输出信息(接收超时)如下:
RF Init OK
TXRX MODE
Tx cnt 1
Rxerr
Tx cnt 2
Rxerr
Tx cnt 3
Rxerr
如果超时时间内未收到数据,则延时后,重新发送一包数据。
5代码流程图¶
6代码实现¶
ret = rf_init(); //初始化
if(ret != OK)
{
DDL_Printf(" RF Init Fail");
while(1);
}
rf_set_default_para(); //配置参数
if(rf_single_tx_data(tx_test_buf, TX_LEN, &tx_time) != OK) //发送数据
{
DDL_Printf("tx fail \r\n");
}
while (1)
{
rf_irq_process(); //轮询中断标志
if(rf_get_recv_flag() == RADIO_FLAG_RXDONE) //接收成功
{
BSP_LED_Toggle();
rf_set_recv_flag(RADIO_FLAG_IDLE);
DDL_Printf("Rx : SNR: %f ,RSSI: %f \r\n", RxDoneParams.Snr, RxDoneParams.Rssi);
for(i = 0; i < RxDoneParams.Size; i++)
{
DDL_Printf("0x%02x ", RxDoneParams.Payload[i]);
}
DDL_Printf("\r\n");
rxcnt ++;
DDL_Printf("###Rx cnt %d##\r\n", rxcnt);
SysTick_Delay(3000);
if(rf_single_tx_data(tx_test_buf, TX_LEN, &tx_time) != OK) //成功后再次发送数据
{
DDL_Printf("tx fail \r\n");
}
}
if((rf_get_recv_flag() == RADIO_FLAG_RXTIMEOUT) || (rf_get_recv_flag() == RADIO_FLAG_RXERR)) //接收失败
{
rf_set_recv_flag(RADIO_FLAG_IDLE);
DDL_Printf("Rxerr\r\n");
HAL_Delay(10000);
if(rf_single_tx_data(tx_test_buf, TX_LEN, &tx_time) != OK) //失败后再次发送数据
{
DDL_Printf("tx fail \r\n");
}
}
if(rf_get_transmit_flag() == RADIO_FLAG_TXDONE) //发送成功
{
rf_set_transmit_flag(RADIO_FLAG_IDLE);
txcnt ++;
DDL_Printf("Tx cnt %d\r\n", txcnt );
//txdone
//single_timeout_rx
rf_enter_single_timeout_rx(15000);//进入接收
}
}
7 注意事项¶
将两个模组先后上电,即可实现两个模组互相收发的功能。
模组初次上电发送后,会进入超时接收模式。如果超时时间内未收到数据,则延时后,重新发送一包数据;如果收到了数据,则延时后,再次发送一包数据。
注意,PAN3029芯片在单次模式下(包含单次发射模式,超时接收模式和单次接收模式),发送或接收完成后需要切换至stb3模式,然后再执行后续操作。