From 74bd25da02aa4aa8f77c49be13ae2a502fcfb2e0 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期二, 12 十一月 2024 18:05:17 +0800 Subject: [PATCH] 可以跟基站测距 FSK模式 --- Src/radio/Lora.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 46 insertions(+), 6 deletions(-) diff --git a/Src/radio/Lora.c b/Src/radio/Lora.c index c4fe696..88b08e8 100644 --- a/Src/radio/Lora.c +++ b/Src/radio/Lora.c @@ -21,6 +21,7 @@ void Lora47xrx_Init(void); void Lora433_change(void); void Lora433rx_Init(void); +void SwitchLoraSettings_FSK(uint32_t freq,uint8_t sf,uint8_t power); void SwitchLoraSettings(uint32_t freq,uint8_t sf,uint8_t power); uint32_t RxDutyCycle_RX_time =128; uint32_t RxDutyCycle_SLEEP_time=256; @@ -259,9 +260,13 @@ lora_up_rec_flag=1; if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_RANGEPOLL) { + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); UWB_Wkup(); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); MbxTagUwbRec(); +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); HAL_GPIO_WritePin(RADIO_NSS_GPIO_Port, RADIO_NSS_Pin, GPIO_PIN_RESET); //片选lora有效 + Radio.Rx(0); } if(RX_Buffer[MSG_TYPE_IDX]==LORA_MSGTYPE_WGRESPTAG) { @@ -350,22 +355,24 @@ } } } - } if(!no_rx_flag) { if(lora_jianting_flag&&LoraUp_flag==0) { - SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); + SwitchLoraSettings_FSK(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); Radio.Rx(0); } } + } + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); } void OnTxTimeout( void ) { Radio.Standby(); if(lora_jianting_flag) - SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); + SwitchLoraSettings_FSK(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); } uint8_t tm; uint16_t Lora_rece_error; @@ -382,7 +389,7 @@ } if(lora_jianting_flag) { - SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); + SwitchLoraSettings_FSK(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); Radio.Rx(0); } } @@ -392,7 +399,7 @@ Radio.Standby(); if(lora_jianting_flag) - SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); + SwitchLoraSettings_FSK(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],UWB_CHANNEL_SF,0); } uint16_t freq_test; @@ -421,6 +428,39 @@ } +uint16_t freq_test; +#define FSK_FDEV 127e3 // Hz +#define FSK_DATARATE 250e3 // bps +#define FSK_BANDWIDTH 250e3 // Hz >> DSB in sx126x +#define FSK_AFC_BANDWIDTH 100e3 // Hz +#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx +#define FSK_FIX_LENGTH_PAYLOAD_ON false +void SwitchLoraSettings_FSK(uint32_t freq,uint8_t sf,uint8_t power) +{ + +// RadioEvents.TxDone = OnTxDone; +// RadioEvents.RxDone = OnRxDone; +// RadioEvents.TxTimeout = OnTxTimeout; +// RadioEvents.RxTimeout = OnRxTimeout; +// RadioEvents.RxError = OnRxError; + //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); +// Radio.Init( &RadioEvents ); + Radio.Standby(); + // HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); + Radio.SetChannel( freq*1000000 ); + freq_test = freq; + Radio.SetTxConfig( MODEM_FSK, 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 ); + + +} extern u8 active_flag; void LoraInit(void) { @@ -431,7 +471,7 @@ RadioEvents.RxError = OnRxError; Radio.Init( &RadioEvents ); - SwitchLoraSettings(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],5,0); //切换lora接收频点 + SwitchLoraSettings_FSK(UWB_CHANNEL_FRQ+g_com_map[GROUP_ID],5,0); //切换lora接收频点 if(active_flag) { Radio.Rx( 0 ); -- Gitblit v1.9.3