标题: stm32 SubGHz_Phy_PingPong(点对点通信)例程无线收发数据问题 [打印本页]

作者: mqh123    时间: 2023-5-17 15:53
标题: stm32 SubGHz_Phy_PingPong(点对点通信)例程无线收发数据问题
官方程序的逻辑是,主设备发送PING给从设备,从设备回复PONG给主设备,一直重复这个过程。在官方程序中,每次发送PING(PONG)都发送了32字节的数据,但是实际上PING(PONG)只需要4个字节,剩下28个字节都是0。
现在需要将几十K的数据发送给从设备。
软件逻辑是,从设备收到PING,发送PONG给主设备,主设备收到PONG开始数据收发过程。主设备每发送一个数据包,就会进入接收模式,直到接收到下一个pong。从设备接收到数据,就发送一个pong给主设备。

官方程序设定最大有效负载长度为256字节   函数原型void    ( *SetMaxPayloadLength )( RadioModems_t modem, uint8_t max );

第一次实验,每次发送8字节数据,代码运行成功,耗时2.5小时
第二次实验,每次发送32字节数据,代码运行成功,耗时0.5小时
第三次实验,每次发送64字节数据,代码运行结束,数据有丢失
第四次实验,每次发送40字节数据,代码运行结束,数据有丢失
发现只要超过官方例程的32字节就会有数据丢失,上位机软件会打印IRQ_CRC_ERROR,这个信息好像是硬件中断函数打印的,但是我没找到中断回调函数在哪
//设置发送参数

  Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,//模式LoRa,发送功率14dbm,0 FSK模式下频移参数,信号带宽124KHz
                    LORA_SPREADING_FACTOR, LORA_CODINGRATE,           //数据传输速率1024bps,编码率
                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, //前导长度8、是否固定数据包长度(否)
                    true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);//是否CRC校验(是),是否频率跳变,频率跳变周期,IQ采样反转大多数情况为0,发送超时时间3秒


//设置接收参数

  Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, //模式,信号带宽,数据传输速率
                    LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,     //编码率,0设置FSK的AFC自动频率控制,前导长度
                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, //超时符号数,是否固定数据包长度
                    0, true, 0, 0, LORA_IQ_INVERSION_ON, true);  //0若为固定数据包则有这个参数设置长度,CRC校验true,是否频率跳变0,频率跳变周期0,IQ采样反转大多数情况为0,true


  Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE); //设置最大负载长度255


作者: mqh123    时间: 2023-5-17 22:03
问题已经得到解决。STM32 Pingpong 收发例程是基于串口通信的,如果你遇到了数据丢失的问题,很可能是因为数据传输速率过快导致。你可以尝试调整波特率降低传输速率并重新测试。

IRQ_CRC_ERROR 表示接收到的数据在 CRC 校验时出错,这可能是由于信号干扰、噪声或者其他原因导致的。你可以检查一下你的硬件连接是否稳定,并且确认发送端和接收端设置的参数是否匹配。

此外,如果你使用的是 DMA 方式进行传输,也有可能是 DMA 缓冲区溢出导致的数据丢失。你可以查看 DMA 配置以确认是否存在这种情况。

最后,如果你无法确定具体的问题所在,可以尝试利用调试工具(如逻辑分析仪)来对串口通信进行抓包分析,以便更好地定位问题。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1