From 9ff25be6f85a1dc8a04470437d6597399a45d11f Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期五, 15 九月 2023 17:08:29 +0800 Subject: [PATCH] 1 --- Src/radio/Lora.c | 225 +++++++++++++++++++++++++++++++------------------------- 1 files changed, 124 insertions(+), 101 deletions(-) diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c index 79319fc..5648852 100644 --- a/Src/radio/Lora.c +++ b/Src/radio/Lora.c @@ -9,13 +9,11 @@ #include "string.h" #include "stdio.h" #include "delay.h" -#include "main.h" static RadioEvents_t RadioEvents; #define USE_MODEM_LORA //#define USE_MODEM_FSK #define REGION_CN779 -uint32_t RxDutyCycle_RX_time =128; -uint32_t RxDutyCycle_SLEEP_time=256; + #if defined( REGION_AS923 ) #define RF_FREQUENCY 923000000 // Hz @@ -64,8 +62,8 @@ -//bool EnableMaster=true;//主选择 -bool EnableMaster=false;//从选择 +bool EnableMaster=true;//主选择 +//bool EnableMaster=false;//从选择 uint16_t crc_value; /*! @@ -85,13 +83,13 @@ // 2: 4/6, // 3: 4/7, // 4: 4/8] -#define LORA_PREAMBLE_LENGTH_T 10 // Same for Tx +#define LORA_PREAMBLE_LENGTH_T 96 // Same for Tx #define LORA_PREAMBLE_LENGTH_R 64 // Same for Rx //#define LORA_PREAMBLE_LENGTH 990 // Same for Tx and Rx #define LORA_SYMBOL_TIMEOUT 0 // Symbols #define LORA_FIX_LENGTH_PAYLOAD_ON false #define LORA_IQ_INVERSION_ON_T false -#define LORA_IQ_INVERSION_ON_R false +#define LORA_IQ_INVERSION_ON_R true #elif defined( USE_MODEM_FSK ) @@ -117,8 +115,7 @@ TX_TIMEOUT, }States_t; -//#define RX_TIMEOUT_VALUE 1000 -#define RX_TIMEOUT_VALUE 64000 +#define RX_TIMEOUT_VALUE 1000 #define BUFFER_SIZE 64 // Define the payload size here const uint8_t PingMsg[] = "PING"; @@ -139,29 +136,24 @@ void OnRxTimeout( void ); void OnRxError( void ); -uint8_t Lora_rx_open_flag; + void LedToggle(void) { // HAL_GPIO_TogglePin(GPIOB, LED1_Pin); } -void Lora_rx_open( void ) -{ - if(Lora_rx_open_flag==1) - { - Lora_Init(); - Lora_rx_open_flag=0; - } -} + + + void OnTxDone( void ) { -Lora_rx_open_flag=1; +// T_R_Init(0); + Radio.Standby(); +// Radio.Rx( RX_TIMEOUT_VALUE ); //进入接收 + } -extern uint8_t frame_seq_nb2,rec_nearbase_num,ancidlist_num; -uint16_t RX_TIMEOUTs; -extern LPTIM_HandleTypeDef hlptim1; -uint16_t current_time,start_time,end_time; +extern uint16_t tx_num; void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) { BufferSize = size; @@ -170,42 +162,72 @@ SnrValue = snr; Radio.Standby(); + + if(EnableMaster) { -// HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); -// Delay_Ms(10); -// HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); - uint16_t i=0; - for(i=0;i<BufferSize;i++) - {printf("RXD %d:\r\n",RX_Buffer[i]);} - RX_TIMEOUTs++; - printf("RX_num :%d\r\n",RX_TIMEOUTs); -// start_time=HAL_LPTIM_ReadCounter(&hlptim1); -// end_time=start_time+((32768/1000)*20); -// if(end_time>=32768) -// {end_time-=32768;} -// current_time=HAL_LPTIM_ReadCounter(&hlptim1); - HAL_GPIO_WritePin(RADIO_NSS_GPIO_Port, RADIO_NSS_Pin, GPIO_PIN_SET); -// while(current_time<end_time||current_time>end_time+15000) -// { -// current_time=HAL_LPTIM_ReadCounter(&hlptim1); - Anchor_App(); -// } + if(memcmp(RX_Buffer,PongMsg,4)==0) + { + LedToggle();//LED闪烁 + printf("Master RXD PONG!\r\n"); + + } - HAL_GPIO_WritePin(RADIO_NSS_GPIO_Port, RADIO_NSS_Pin, GPIO_PIN_RESET); - delay_ms(10); - - Radio.SetChannel( 470200000 ); - Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, 0, - 7, LORA_CODINGRATE,LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON, - false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 ); - - Radio.Send( usart_send, 12+rec_nearbase_num*4); -// printf("RX_TIMEOUTs :%d\r\n",RX_TIMEOUTs); -// Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); -// printf("RX_TIMEOUTs :XXXX\r\n"); -// Radio.Rx( RX_TIMEOUT_VALUE ); -// printf("Slave TXD XXXX\r\n"); - + +// HAL_Delay_nMS(1000); +// +// TX_Buffer[0] = 'P'; +// TX_Buffer[1] = 'I'; +// TX_Buffer[2] = 'N'; +// TX_Buffer[3] = 'G'; +// +//// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 +//// TX_Buffer[4]=crc_value>>8; +//// TX_Buffer[5]=crc_value; +//// //Radio.Send( TX_Buffer, 6); +// Radio.Send( TX_Buffer, 4); + +// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); +// printf("Master TXD PING!\r\n"); +// HAL_Delay_nMS( 1 ); +// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); + + //printf("Master TXD PING!\r\n"); + } + else + { + if(memcmp(RX_Buffer,PingMsg,4)==0) + { + +// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); + printf("Slave RXD PING!\r\n"); +// HAL_Delay_nMS( 1 ); +// HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_RESET); + + LedToggle();//LED闪烁 + //printf("Slave RXD PING!\r\n"); + + T_R_Init(1); + + TX_Buffer[0] = 'P'; + TX_Buffer[1] = 'O'; + TX_Buffer[2] = 'N'; + TX_Buffer[3] = 'G'; + + +// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 +// TX_Buffer[4]=crc_value>>8; +// TX_Buffer[5]=crc_value; +// //Radio.Send( TX_Buffer, 6); + + + Radio.Send( TX_Buffer, 4); + printf("Slave TXD PONG!\r\n"); + } + else + { + Radio.Rx( RX_TIMEOUT_VALUE ); + printf("Slave TXD XXXX\r\n"); + } } } @@ -219,16 +241,16 @@ Radio.Standby(); if(EnableMaster) { -// TX_Buffer[0] = 'P'; -// TX_Buffer[1] = 'I'; -// TX_Buffer[2] = 'N'; -// TX_Buffer[3] = 'G'; -// -//// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 -//// TX_Buffer[4]=crc_value>>8; -//// TX_Buffer[5]=crc_value; -// //Radio.Send( TX_Buffer, 6); -// Radio.Send( TX_Buffer, 4); + TX_Buffer[0] = 'P'; + TX_Buffer[1] = 'I'; + TX_Buffer[2] = 'N'; + TX_Buffer[3] = 'G'; + +// crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 +// TX_Buffer[4]=crc_value>>8; +// TX_Buffer[5]=crc_value; + //Radio.Send( TX_Buffer, 6); + Radio.Send( TX_Buffer, 4); // HAL_GPIO_WritePin( OUT1_GPIO_Port, OUT1_Pin,GPIO_PIN_SET); // HAL_Delay_nMS( 1 ); @@ -237,11 +259,7 @@ } else { - Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); -// printf("slave OnRxTimeout\r\n"); - -// Radio.Rx( RX_TIMEOUT_VALUE ); - printf("slave OnRxTimeout\r\n"); + Radio.Rx( RX_TIMEOUT_VALUE ); } } @@ -268,18 +286,15 @@ } else { - Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); - printf("slave OnRxError\r\n"); -// Radio.Rx( RX_TIMEOUT_VALUE ); - + Radio.Rx( RX_TIMEOUT_VALUE ); } } -//void T_R_Init(uint8_t kind) -//{ +void T_R_Init(uint8_t kind) +{ // Radio.Init( &RadioEvents ); // if(kind==1) //1:Txd config // { @@ -308,7 +323,7 @@ //// LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R, //// LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, //// 0, false, 0, 0, LORA_IQ_INVERSION_ON_R, false ); -//} +} void Lora_Init(void) { @@ -327,32 +342,50 @@ { Radio.SetChannel( RF_FREQUENCY ); } -// Radio.SetStandby( STDBY_RC ); + + #if defined( USE_MODEM_LORA ) // Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, // LORA_SPREADING_FACTOR, LORA_CODINGRATE, // LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, // true, 0, 0, LORA_IQ_INVERSION_ON, 3000 ); -// Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, -// LORA_SPREADING_FACTOR, LORA_CODINGRATE, -// LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON, -// false, 0, 0, LORA_IQ_INVERSION_ON_T, 1000 ); + Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, + LORA_SPREADING_FACTOR, LORA_CODINGRATE, + LORA_PREAMBLE_LENGTH_T, LORA_FIX_LENGTH_PAYLOAD_ON, + false, 0, 0, LORA_IQ_INVERSION_ON_T, 3000 ); // Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, // LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, // LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, // 0, true, 0, 0, LORA_IQ_INVERSION_ON, false ); - Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, - LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R, - LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, - 0, false, 0, 0, LORA_IQ_INVERSION_ON_R, 1 ); +// Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, +// LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH_R, +// LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, +// 0, false, 0, 0, LORA_IQ_INVERSION_ON_R, false ); + // Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, // LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, // LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, // 0, false, 0, 0, LORA_IQ_INVERSION_ON, true ); + +#elif defined( USE_MODEM_FSK ) + + Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, + FSK_DATARATE, 0, + FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, + true, 0, 0, 0, 3000 ); + + Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, + 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, + 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true, + 0, 0,false, false ); +#else + #error "Please define a frequency band in the compiler options." +#endif + if(EnableMaster) { @@ -361,7 +394,7 @@ TX_Buffer[0] = 'P'; TX_Buffer[1] = 'I'; TX_Buffer[2] = 'N'; - TX_Buffer[3] = 'G'; + TX_Buffer[3] = tx_num; crc_value=RadioComputeCRC(TX_Buffer,4,CRC_TYPE_IBM);//计算得出要发送数据包CRC值 TX_Buffer[4]=crc_value>>8; @@ -377,18 +410,8 @@ } else { - SX126xClearIrqStatus( IRQ_RADIO_ALL ); -// SX126xSetDioIrqParams( IRQ_RX_DONE | IRQ_CRC_ERROR, -// IRQ_RX_DONE | IRQ_CRC_ERROR, -// IRQ_RADIO_NONE, IRQ_RADIO_NONE -// ); -// SX126xSetDioIrqParams( IRQ_RADIO_ALL, //IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT, -// IRQ_RADIO_ALL, //IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT, -// IRQ_RADIO_NONE, -// IRQ_RADIO_NONE ); - Radio.SetRxDutyCycle(RxDutyCycle_RX_time,RxDutyCycle_SLEEP_time); -// Radio.Rx( RX_TIMEOUT_VALUE ); -// printf("I am Slave!\r\n"); + printf("I am Slave!\r\n"); + Radio.Rx( RX_TIMEOUT_VALUE ); } } -- Gitblit v1.9.3