当前文档版本为 v0.7.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

TX RX例程

1 功能概述

本代码示例主要演示PAN3029的收发切换,互相通信功能。

2 环境要求

  • Board: PAN3029 开发板

  • Mini USB线2根,用于给开发板供电和查看串口打印Log

  • J-Link下载器一个,用于程序下载

  • 将 J1,J4用跳帽连接

3 编译和烧录

例程位置:01_HCSDK\Demo\TXRX\MDK

打开目录下的pan3029.uvprojx工程,编译整个代码工程。

4 使用说明

根据环境要求一节的介绍,正确连接2套 EVB 开发板的跳线,编译、下载程序:

  1. 在电脑上打开串口调试工具,串口参数:115200/8bit/1stop/无校验

  2. 观察串口打印的内容,理论上初始化成功后,串口会打印相关信息

  3. 需要下载两套开发板程序演示本功能,两套程序代码不需要修改,将两个开发板先后上电,即可实现两个模组互相收发的功能。

串口输出信息(正常通信)如下:

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代码流程图

img

图 1 Tx-Rx代码流程图

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模式,然后再执行后续操作。