| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /**
- ******************************** STM32F0xx *********************************
- * @文件名 : LoraComm.c
- * @作者 : sun
- * @库版本 : V1.5.0
- * @文件版本 : V1.0.0
- * @日期 : 2016年06月04日
- * @摘要 : LoraComm源文件
- ******************************************************************************/
-
- #include "LoraComm.h"
- #include "radio.h"
- #include "stdio.h"
- #include "usart.h"
- #include "sx1276-Hal.h"
- #include "sx1276.h"
- //#include "debug.h"
- #include "sx1276-LoRaMisc.h"
- #include "sx1276-LoRa.h"
-
- #define LENGTH_OF_DAT_PAYLOAD 25
- /************************************************
- 函数名称 : 应用层函数,Lora接收初始化函数
- 功 能 : Lora接收初始化函数
- 参 数 : SingleMode 单次接收还是循环接收,1为单次接收,0为循环接收,
- RF_Frequency 接收频率参数
- Timeout 超时时间
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- void LoraReadInit(uint8_t SingleMode,uint32_t RF_Frequency,uint32_t Timeout, uint16_t preamble )
- {
- Radio->LoRaSetRxSingleOn( SingleMode );
- Radio->LoRaSetRFFrequency( RF_Frequency );
- Radio->LoRaSetPreambleLength( preamble );
- Radio->LoRaSetRxPacketTimeout( Timeout );
- Radio->StartRx( );
- }
- /************************************************
- 函数名称 : 应用层函数,LoraWrite
- 功 能 : Lora发送 阻塞函数
- 参 数 : buffer 发送缓存区,
- bufferLen 发送数据长度
- RF_Frequency 接收频率
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- uint8_t LoraWrite(uint8_t * buffer,uint16_t bufferLen,uint32_t RF_Frequency,uint16_t preamble,uint32_t Timeout )
- {
- uint32_t result = 0;
- Radio->LoRaSetRFFrequency( RF_Frequency ); //设置发射频率 参数来自宏定义
- Radio->LoRaSetPreambleLength( preamble );
- Radio->LoRaSetTxPacketTimeout( Timeout );
-
- if(bufferLen > MAXLOADLEN)
- {
- Radio->SetTxPacket( buffer, MAXLOADLEN ); //开始发送
- }
- else
- {
- Radio->LoRaSetPayloadLength(bufferLen);
- Radio->SetTxPacket( buffer, bufferLen ); //开始发送
- }
- while( 1 )
- {
- result = Radio->Process( );
- if( result == RF_TX_DONE || result == RF_TX_TIMEOUT )
- break;
- }
- if( result == RF_TX_DONE )
- {
- return 1;
- }
- return 0;
- }
- /************************************************
- 函数名称 : ReceiverProcess
- 功 能 : 单信道接收,阻塞函数,接收指定敷在长度的数据
- 参 数 : preamble 前导码长度
- timeout 接收超时时间
- snr 信噪比
- rssi 信号强度
- 返 回 值 : 接收到数据返回数据长度 失败返回-1
- 作 者 : sun
- *************************************************/
- int16_t LoraSpecialRead( void *Buffer ,uint16_t PreambleLength,uint32_t Timeout, int8_t *snr,int16_t *rssi )
- {
- uint32_t result;
- uint16_t bufferLen = 0;
- Radio->LoRaSetRxSingleOn( 0 );
- Radio->LoRaSetRFFrequency( UPLINK_FREQUENCY );
-
- Radio->LoRaSetRxPacketTimeout( Timeout );
-
- Radio->LoRaSetPreambleLength( PreambleLength );
-
- Radio->LoRaSetPayloadLength( LENGTH_OF_DAT_PAYLOAD );
- Radio->StartRx( );
- while( 1 )
- {
- result = Radio->Process( );
- if( result == RF_RX_DONE || result == RF_RX_TIMEOUT )
- break;
- }
- if( result == RF_RX_DONE )
- {
- Radio->GetRxPacket( Buffer, ( uint16_t* )&bufferLen );
- *rssi = ( int16_t )( SX1276LoRaGetPacketRssi( ) + 0.5 );
- *snr = SX1276LoRaGetPacketSnr( );
- return bufferLen;
- }
- return -1;
- }
- /************************************************
- 函数名称 : 应用层函数,LoraSpecialWrite
- 功 能 : Lora发送 把查询发送完成 请在程序里查询 防止阻塞
- 参 数 : buffer 发送缓存区,
- bufferLen 发送数据长度
- RF_Frequency 接收频率
- 返 回 值 : 无
- 作 者 : sun
- *************************************************/
- void LoraSpecialWrite(uint8_t * buffer,uint16_t bufferLen,uint32_t RF_Frequency,uint16_t preamble,uint32_t Timeout )
- {
- Radio->LoRaSetRFFrequency( RF_Frequency ); //设置发射频率 参数来自宏定义
- Radio->LoRaSetPreambleLength( preamble );
- Radio->LoRaSetTxPacketTimeout( Timeout );
- if(bufferLen > MAXLOADLEN)
- {
- Radio->SetTxPacket( buffer, MAXLOADLEN ); //开始发送
- }
- else
- {
- Radio->LoRaSetPayloadLength(bufferLen);
- Radio->SetTxPacket( buffer, bufferLen ); //开始发送
- }
- }
|