標(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