標(biāo)題: stm32 SubGHz_Phy_PingPong(點(diǎn)對點(diǎn)通信)例程無線收發(fā)數(shù)據(jù)問題 [打印本頁]

作者: mqh123    時間: 2023-5-17 15:53
標(biāo)題: stm32 SubGHz_Phy_PingPong(點(diǎn)對點(diǎn)通信)例程無線收發(fā)數(shù)據(jù)問題
官方程序的邏輯是,主設(shè)備發(fā)送PING給從設(shè)備,從設(shè)備回復(fù)PONG給主設(shè)備,一直重復(fù)這個過程。在官方程序中,每次發(fā)送PING(PONG)都發(fā)送了32字節(jié)的數(shù)據(jù),但是實(shí)際上PING(PONG)只需要4個字節(jié),剩下28個字節(jié)都是0。
現(xiàn)在需要將幾十K的數(shù)據(jù)發(fā)送給從設(shè)備。
軟件邏輯是,從設(shè)備收到PING,發(fā)送PONG給主設(shè)備,主設(shè)備收到PONG開始數(shù)據(jù)收發(fā)過程。主設(shè)備每發(fā)送一個數(shù)據(jù)包,就會進(jìn)入接收模式,直到接收到下一個pong。從設(shè)備接收到數(shù)據(jù),就發(fā)送一個pong給主設(shè)備。

官方程序設(shè)定最大有效負(fù)載長度為256字節(jié)   函數(shù)原型void    ( *SetMaxPayloadLength )( RadioModems_t modem, uint8_t max );

第一次實(shí)驗(yàn),每次發(fā)送8字節(jié)數(shù)據(jù),代碼運(yùn)行成功,耗時2.5小時
第二次實(shí)驗(yàn),每次發(fā)送32字節(jié)數(shù)據(jù),代碼運(yùn)行成功,耗時0.5小時
第三次實(shí)驗(yàn),每次發(fā)送64字節(jié)數(shù)據(jù),代碼運(yùn)行結(jié)束,數(shù)據(jù)有丟失
第四次實(shí)驗(yàn),每次發(fā)送40字節(jié)數(shù)據(jù),代碼運(yùn)行結(jié)束,數(shù)據(jù)有丟失
發(fā)現(xiàn)只要超過官方例程的32字節(jié)就會有數(shù)據(jù)丟失,上位機(jī)軟件會打印IRQ_CRC_ERROR,這個信息好像是硬件中斷函數(shù)打印的,但是我沒找到中斷回調(diào)函數(shù)在哪
//設(shè)置發(fā)送參數(shù)

  Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,//模式LoRa,發(fā)送功率14dbm,0 FSK模式下頻移參數(shù),信號帶寬124KHz
                    LORA_SPREADING_FACTOR, LORA_CODINGRATE,           //數(shù)據(jù)傳輸速率1024bps,編碼率
                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, //前導(dǎo)長度8、是否固定數(shù)據(jù)包長度(否)
                    true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);//是否CRC校驗(yàn)(是),是否頻率跳變,頻率跳變周期,IQ采樣反轉(zhuǎn)大多數(shù)情況為0,發(fā)送超時時間3秒


//設(shè)置接收參數(shù)

  Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, //模式,信號帶寬,數(shù)據(jù)傳輸速率
                    LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,     //編碼率,0設(shè)置FSK的AFC自動頻率控制,前導(dǎo)長度
                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, //超時符號數(shù),是否固定數(shù)據(jù)包長度
                    0, true, 0, 0, LORA_IQ_INVERSION_ON, true);  //0若為固定數(shù)據(jù)包則有這個參數(shù)設(shè)置長度,CRC校驗(yàn)true,是否頻率跳變0,頻率跳變周期0,IQ采樣反轉(zhuǎn)大多數(shù)情況為0,true


  Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE); //設(shè)置最大負(fù)載長度255


作者: mqh123    時間: 2023-5-17 22:03
問題已經(jīng)得到解決。STM32 Pingpong 收發(fā)例程是基于串口通信的,如果你遇到了數(shù)據(jù)丟失的問題,很可能是因?yàn)閿?shù)據(jù)傳輸速率過快導(dǎo)致。你可以嘗試調(diào)整波特率降低傳輸速率并重新測試。

IRQ_CRC_ERROR 表示接收到的數(shù)據(jù)在 CRC 校驗(yàn)時出錯,這可能是由于信號干擾、噪聲或者其他原因?qū)е碌。你可以檢查一下你的硬件連接是否穩(wěn)定,并且確認(rèn)發(fā)送端和接收端設(shè)置的參數(shù)是否匹配。

此外,如果你使用的是 DMA 方式進(jìn)行傳輸,也有可能是 DMA 緩沖區(qū)溢出導(dǎo)致的數(shù)據(jù)丟失。你可以查看 DMA 配置以確認(rèn)是否存在這種情況。

最后,如果你無法確定具體的問題所在,可以嘗試?yán)谜{(diào)試工具(如邏輯分析儀)來對串口通信進(jìn)行抓包分析,以便更好地定位問題。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1