板子移植程式后,檢驗SPI資料發送接收沒問題,但通信時,資料發送不出去,DIO0中斷沒反應。有沒有大佬遇到這種問題
u8 LoRaTxData (u8 *pbuf, u8 size ,u8 *pcrcbuf ,u8 crcflag)
{
u32 i,j;
if ( pbuf==0 || size==0 ) //沒有資料可發送
{
return 1; //發送失敗 -- 回傳1
}
//1.------>進入待機狀態
SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY );
//2.------>發送初始化
SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT |
RFLR_IRQFLAGS_RXDONE |
RFLR_IRQFLAGS_PAYLOADCRCERROR |
RFLR_IRQFLAGS_VALIDHEADER |
//RFLR_IRQFLAGS_TXDONE | //打開發送完成中斷(Tx)
RFLR_IRQFLAGS_CADDONE |
RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL |
RFLR_IRQFLAGS_CADDETECTED;
SX1276Write( REG_LR_IRQFLAGSMASK, SX1276LR->RegIrqFlagsMask );
SX1276LR->RegHopPeriod = 0; //頻率跳變之間的符號時周期為:0
SX1276Write( REG_LR_HOPPERIOD, SX1276LR->RegHopPeriod );
//初始化待發送資料所占快取區的大小
SX1276LR->RegPayloadLength = size; //資料負載長度(不包括CRC長度)
SX1276Write( REG_LR_PAYLOADLENGTH, SX1276LR->RegPayloadLength +4); //在implicit模式(隱式包頭),必須寫入FIFO長度
SX1276LR->RegFifoTxBaseAddr = 0x00; //發送基地址設定為0x00
SX1276Write( REG_LR_FIFOTXBASEADDR, SX1276LR->RegFifoTxBaseAddr ); //寫入發送的首地址
SX1276LR->RegFifoAddrPtr = SX1276LR->RegFifoTxBaseAddr; //FIFO地址指標指向Tx基地址
SX1276Write( REG_LR_FIFOADDRPTR, SX1276LR->RegFifoAddrPtr ); //寫入FIFO的訪問地址
//3.------>將待發送的資料寫入到FIFO中
SX1276WriteFifo( pbuf, SX1276LR->RegPayloadLength ); //寫入要發送的資料
//最后寫入4Byte的CRC校驗值
if(crcflag == 1)
{
if( size<(256-4) )
SX1276WriteFifo( pcrcbuf, 4 );
else
return 1;
}
/*****************************************************************************
*在ZM470SX-M上,DIO4接到射頻開關的6腳,進入發送狀態后此引腳需要拉低,
*所以在LoRa模式必須設為:RFLR_DIOMAPPING2_DIO4_00
******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
//DIO0:TxDone 埠映射設定
SX1276LR->RegDioMapping1 = RFLR_DIOMAPPING1_DIO0_01 | RFLR_DIOMAPPING1_DIO1_11|
RFLR_DIOMAPPING1_DIO2_11 | RFLR_DIOMAPPING1_DIO3_11;
SX1276LR->RegDioMapping2 = RFLR_DIOMAPPING2_DIO4_00 | RFLR_DIOMAPPING2_DIO5_11;
SX1276WriteBuffer( REG_LR_DIOMAPPING1, &SX1276LR->RegDioMapping1, 2 );
///////////////////////////////////////////////////////////////////////////////
//4.------>進入到發送模式,發送資料
SX1276LoRaSetOpMode( RFLR_OPMODE_TRANSMITTER ); //進入發送狀態
//5.------>等待發送完成(檢測TxDone中斷)
i = 298000;
while ( DIO0 == 0 && i != 0 ) //等待發送完成或者發送失敗超時,完成后:DIO0為高電平
{
i--;
for(j = 0; j < 100; j++); //超時等待約1ms
}
//如果發送失敗
if (i == 0)
{
//失敗 -- 回傳2
return 2;
}
//如果發送成功
else
{
//6.------>發送完成進入到待機模式
SX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_TXDONE ); //清除發送完成中斷
SX1276LoRaSetOpMode( RFLR_OPMODE_STANDBY ); //進入待機狀態
return 0; //成功 -- 回傳0
}
}
uj5u.com熱心網友回復:
樓主 弄的怎么樣,我最近也想玩一下lora 通信、uj5u.com熱心網友回復:
可私信交流。我之前除錯好一套lora。通過spi直接控制。uj5u.com熱心網友回復:
SX1276LR->RegIrqFlagsMask = RFLR_IRQFLAGS_RXTIMEOUT |RFLR_IRQFLAGS_RXDONE |
RFLR_IRQFLAGS_PAYLOADCRCERROR |
RFLR_IRQFLAGS_VALIDHEADER |
//RFLR_IRQFLAGS_TXDONE | //打開發送完成中斷(Tx)
RFLR_IRQFLAGS_CADDONE |
RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL |
RFLR_IRQFLAGS_CADDETECTED;
這段代碼有問題吧。
uj5u.com熱心網友回復:
您好,請問解決了嗎?我也遇到了此問題轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/69043.html
標籤:無線
上一篇:求解答
